/// <summary>
        /// Refreshes tesseract data gui
        /// </summary>
        private void SetTesseractDataDirty()
        {
            if(Directory.Exists(m_TessdataDirectory))
            {
                string[] trainedDataFiles = Directory.GetFiles(m_TessdataDirectory, "*.traineddata", SearchOption.TopDirectoryOnly);

                string streamingAssetsPath = Path.Combine(Application.dataPath, TESSDATA_STREAMING_PATH);
                string[] tessdataFiles = Directory.GetFiles(streamingAssetsPath, "*.traineddata", SearchOption.TopDirectoryOnly);

                int trainedDataLen = trainedDataFiles.Length;
                m_TessdataList = new TessDataInfo[trainedDataLen];

                for(int i = 0; i < trainedDataLen; i++)
                {
                    FileInfo fileInfo = new FileInfo(trainedDataFiles[i]);

                    m_TessdataList[i] = new TessDataInfo()
                    {
                        selected = Array.Exists<string>(tessdataFiles, a => a.Contains(Path.GetFileName(trainedDataFiles[i]))),
                        name = Path.GetFileName(trainedDataFiles[i]),
                        path = trainedDataFiles[i],
                        fileSize = fileInfo.Length,
                        fileSizeString = TesseractOCRUtility.FormatBytes(fileInfo.Length)
                    };
                }
            }

            m_TotalTessdataSize = GetTotalTessdataSize();
            m_TotalSelectedTessdata = Array.FindAll<TessDataInfo>(m_TessdataList, a => a.selected).Length;
        }
Example #2
0
        /// <summary>
        /// Sets the image to be used
        /// </summary>
        /// <param name="imageData">Image data buffer</param>
        /// <param name="width">Image Width</param>
        /// <param name="height">Image Height</param>
        public void SetImage(byte[] imageData, int width, int height)
        {
            Debug.Assert(m_Handle != IntPtr.Zero, "Handle must not be nulled!");

            if(m_Handle != IntPtr.Zero)
            {
                Color32[] colorBuffer = TesseractOCRUtility.ImageFlipVertical(imageData, width, height);
                imageData = TesseractOCRUtility.Color32ToBytes(colorBuffer);
                TesseractOCRBridge.SetImageData(m_Handle, imageData, width, height, BYTES_PER_PIXEL, BYTES_PER_PIXEL * width);
            }
        }
        /// <summary>
        /// Converts image to text
        /// </summary>
        public void ConvertImageToText()
        {
            m_SnapshotTexture = new Texture2D(m_WebCamTexture.width, m_WebCamTexture.height, TextureFormat.RGB24, false);
            Color32[] colorBuffer = TesseractOCRUtility.ImageRotateClockwise(m_WebCamTexture.GetPixels32(), m_WebCamTexture.width, m_WebCamTexture.height);

            m_SnapshotTexture.Resize(m_WebCamTexture.height, m_WebCamTexture.width);
            m_SnapshotTexture.SetPixels32(colorBuffer);
            m_SnapshotTexture.Apply();

            m_Ocr.SetImage(m_SnapshotTexture);
            m_InputField.text = m_Ocr.GetText();
        }
        /// <summary>
        /// Draws tess data gui
        /// </summary>
        private void DrawTessdataGUI()
        {
            EditorGUILayout.BeginVertical();

            EditorGUILayout.LabelField("Tessdata Settings", EditorStyles.boldLabel);

            EditorGUILayout.BeginVertical("box");

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel("Tessdata Directory");
            m_TessdataDirectory = EditorGUILayout.TextField(m_TessdataDirectory);

            if(GUILayout.Button("..."))
            {
                m_TessdataDirectory = EditorUtility.OpenFolderPanel("Select Tessdata Directory", Path.Combine(Directory.GetCurrentDirectory(), ".."), "");
                SetTesseractDataDirty();
            }

            EditorGUILayout.EndHorizontal();

            EditorGUILayout.Space();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Please select trained data to import.");

            GUILayout.FlexibleSpace();

            EditorGUI.BeginChangeCheck();

            EditorGUILayout.BeginHorizontal(GUILayout.Width(60.0f));
            EditorGUILayout.LabelField("Select All", GUILayout.Width(60.0f));
            m_IsAllDataSelected = EditorGUILayout.Toggle(m_IsAllDataSelected, GUILayout.Width(20.0f));
            EditorGUILayout.EndHorizontal();

            if(EditorGUI.EndChangeCheck())
            {
                AssetDatabase.StartAssetEditing();

                for(int i = 0; i < m_TessdataList.Length; i++)
                {
                    m_TessdataList[i].selected = m_IsAllDataSelected;

                    if(m_IsAllDataSelected)
                    {
                        ImportTessdata(m_TessdataList[i].path);
                        EditorUtility.DisplayProgressBar("Importing All Tessdata", string.Format("Importing {0} ({1}/{2})", m_TessdataList[i].name, i, m_TessdataList.Length), (float)i / (float)m_TessdataList.Length);
                    }
                    else
                    {
                        RemoveTessdata(m_TessdataList[i].path);
                        EditorUtility.DisplayProgressBar("Removing All Tessdata", string.Format("Removing {0} ({1}/{2})", m_TessdataList[i].name, i, m_TessdataList.Length), (float)i / (float)m_TessdataList.Length);
                    }
                }

                AssetDatabase.StopAssetEditing();

                AssetDatabase.Refresh();
                m_TotalTessdataSize = GetTotalTessdataSize();
                m_TotalSelectedTessdata = GetSelectedTessdata().Length;
            }

            EditorGUILayout.EndHorizontal();

            if(m_TessdataList.Length > 0)
            {
                EditorGUILayout.BeginVertical("Box");
                m_TessdataListScrollView = EditorGUILayout.BeginScrollView(m_TessdataListScrollView, GUILayout.Height(200.0f));

                for(int i = 0; i < m_TessdataList.Length; i++)
                {
                    EditorGUI.BeginChangeCheck();

                    EditorGUILayout.BeginHorizontal();
                    m_TessdataList[i].selected = EditorGUILayout.ToggleLeft(m_TessdataList[i].name + " - " + m_TessdataList[i].fileSizeString, m_TessdataList[i].selected);
                    EditorGUILayout.EndHorizontal();

                    if(EditorGUI.EndChangeCheck())
                    {
                        if(m_TessdataList[i].selected)
                        {
                            ImportTessdata(m_TessdataList[i].path);
                        }
                        else
                        {
                            RemoveTessdata(m_TessdataList[i].path);
                        }

                        AssetDatabase.Refresh();
                        m_TotalTessdataSize = GetTotalTessdataSize();
                        m_TotalSelectedTessdata = GetSelectedTessdata().Length;
                    }
                }

                EditorUtility.ClearProgressBar();

                EditorGUILayout.EndScrollView();
                EditorGUILayout.EndVertical();

                EditorGUILayout.LabelField("Selected Count: " + m_TotalSelectedTessdata);
                EditorGUILayout.LabelField("Total Tessdata Size: " + TesseractOCRUtility.FormatBytes(m_TotalTessdataSize));
            }
            else
            {
                EditorGUILayout.HelpBox("Unable to find tessdata from the directory. \nThe project will not work properly.", MessageType.Error, true);

                EditorGUILayout.LabelField("Please visit Tessdata Github and clone your desired repository.");
                if(GUILayout.Button("Tessdata Github"))
                {
                    Help.BrowseURL("https://github.com/tesseract-ocr?q=tessdata");
                }
            }

            EditorGUILayout.EndVertical();

            EditorGUILayout.EndVertical();
        }