移动视觉搜索列表中项目的cameraSource检测

时间:2017-05-13 17:45:38

标签: ocr vision google-vision android-vision text-recognition

我目前正在尝试编写一个Android应用程序,其中用户可以将他或她想要避免的任何食物成分列入黑名单。然后,用户应该能够扫描标签并立即被告知是否通过文本识别找到了任何列入黑名单的成分。

我正在使用cameraSource实时检测文本,这似乎有点奏效,但只有当屏幕上出现的字数很少时才会显示。当屏幕上有太多单词时,它找不到任何内容。

当存在大量单词时会出现什么问题?

        private SurfaceView cameraView;
        private TextView textView;
        private CameraSource cameraSource;
        private const int RequestCameraPermissionID = 1001;
        public JavaList<string> userIngredients;
        public ISharedPreferences pref;
        public ISharedPreferencesEditor edit;
        public Bitmap imageBitmap;


        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.ScanLayout);

            cameraView = FindViewById<SurfaceView>(Resource.Id.surface_view);
            textView = FindViewById<TextView>(Resource.Id.text_view);
            pref = Application.Context.GetSharedPreferences("UserPrefs", FileCreationMode.Private);
            edit = pref.Edit();
            var preferences = pref.GetStringSet("UserPrefs", new JavaList<string>());
            userIngredients = new JavaList<string>(preferences);
            var bitmapOptions = new BitmapFactory.Options();

            TextRecognizer textRecognizer = new TextRecognizer.Builder(ApplicationContext).Build();
            if (!textRecognizer.IsOperational)
            {
                Log.Error("Main Activity", "Detector dependancies are not yet available");
            }
            else
            {
                cameraSource = new CameraSource.Builder(ApplicationContext, textRecognizer)
                    .SetFacing(CameraFacing.Back)
                    .SetRequestedFps(2.0f)
                    .SetAutoFocusEnabled(true)
                    .Build();

                cameraView.Holder.AddCallback(this);
                textRecognizer.SetProcessor(this);
            }
        }



        public void SurfaceCreated(ISurfaceHolder holder)
        {
            if (ActivityCompat.CheckSelfPermission(ApplicationContext, Manifest.Permission.Camera) != Android.Content.PM.Permission.Granted)
            {
                //Request Permission
                ActivityCompat.RequestPermissions(this, new string[] {
                    Android.Manifest.Permission.Camera
                }, RequestCameraPermissionID);
                return;
            }
            cameraSource.Start(cameraView.Holder);
        }

        public void SurfaceDestroyed(ISurfaceHolder holder)
        {
            cameraSource.Stop();
        }

        public void ReceiveDetections(Detections detections)
        {
            bool blackListedFound = false;
            SparseArray items = detections.DetectedItems;
            if (items.Size() != 0)
            {
                textView.Post(() =>
                {
                    for (int i = 0; i < items.Size(); ++i)
                    {
                        for (int j = 0; j < userIngredients.Size(); j++)
                        {
                            if (((TextBlock)items.ValueAt(i)).Value.Equals(userIngredients[j]))
                            {
                                blackListedFound = true;
                                textView.Text = "Not reccomended\nIngredient Found: " + userIngredients[j];
                            }
                        }
                    }
                });
            }
            else if (blackListedFound == false)
            textView.Post(() =>
            {
                textView.Text = "No Ingredients found";
            });
        }


    }
}

以下是我当前问题的一些示例图片; My settings menu with water added to blacklist

这是一个应用程序未能找到黑名单成分(水)的例子; enter image description here

0 个答案:

没有答案