如何为计算机视觉应用程序设计后端

时间:2018-12-19 14:58:07

标签: computer-vision backend

假设我有一系列神经网络,它们对视频输入产生某种解释(例如,对物体进行分类并提供帧中每个人的姿势估计)

我想构建一个显示该视频的应用程序,将网络的输出映射到视频上-例如,一个人走来走去,周围有标有human及其pose(四肢)

我的问题是,为此类应用程序设计后端的最佳起点是什么-假设使用CNN处理视频将在云上进行,并将返回必须实时显示的输出

具体来说,我应该使用哪种平台或语言,以及是否有什么因素可以决定哪种实现是最佳的

  

注意:我很欣赏这个问题很笼统,但是我只是在寻找一个起点(假设我没有适当的软件开发培训)

1 个答案:

答案 0 :(得分:1)

如果您训练有素的物体检测/分类模型并能够检测到所需物体

这是下面用于检测对象并将其保存为视频的常用管道

https://software.intel.com/en-us/articles/object-detection-on-drone-videos-using-caffe-framework
https://software.intel.com/en-us/articles/ai-developer-project-part-3-combating-distracted-driver-behavior

如果我们打算创建一个接受视频作为输入并实时动态显示预测的网络应用,

利用Web套接字将每帧发送到服务器[如您所说的高端计算机],以处理图像并将图像作为响应返回并显示在页面中

请通过下面给出的链接以获取更多信息:

/**
 * Will start the chosen Email app
 *
 * @param context    current component context.
 * @param emails     Emails you would like to send to.
 * @param subject    The subject that will be used in the Email app.
 * @param forceGmail True - if you want to open Gmail app, False otherwise. If the Gmail
 *                   app is not installed on this device a chooser will be shown.
 */
public static void sendEmail(Context context, String[] emails, String subject, boolean forceGmail) {

    Intent i = new Intent(Intent.ACTION_SENDTO);
    i.setData(Uri.parse("mailto:"));
    i.putExtra(Intent.EXTRA_EMAIL, emails);
    i.putExtra(Intent.EXTRA_SUBJECT, subject);
    if (forceGmail && isPackageInstalled(context, "com.google.android.gm")) {
        i.setPackage("com.google.android.gm");
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);
    } else {
        try {
            context.startActivity(Intent.createChooser(i, "Send mail..."));
        } catch (ActivityNotFoundException e) {
            Toast.makeText(context, "No email app is installed on your device...", Toast.LENGTH_SHORT).show();
        }
    }
}

/**
 * Check if the given app is installed on this devuice.
 *
 * @param context     current component context.
 * @param packageName The package name you would like to check.
 * @return True if this package exist, otherwise False.
 */
public static boolean isPackageInstalled(@NonNull Context context, @NonNull String packageName) {
    PackageManager pm = context.getPackageManager();
    if (pm != null) {
        try {
            pm.getPackageInfo(packageName, 0);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
    }
    return false;
}