Private Sub B4XPage_Created (Root1 As B4XView)
Root = Root1
Root.LoadLayout("MainPage")
xui.SetDataFolder("EasyOCR")
Chooser.Initialize(Me, "Chooser")
SetWorkingState(True)
Py.Initialize(Me, "py")
Py.Start(Py.CreateOptions("D:\python\python\python.exe"))
Label1.Text = "Waiting for Python process to connect"
cvs.Initialize(pnlCanvas)
Wait For Py_Connected
Label1.Text = "Loading OCR reader"
ocr.Initialize(Py, Array("en"))
Wait For (Py.Flush) Complete (Unused As Boolean)
Label1.Text = "Ready"
SetWorkingState(False)
End Sub
Private Sub Button1_Click
Wait For (Chooser.ChooseImage(Button1)) Complete (Result As MediaChooserResult)
If Result.Success Then
Dim bmp As B4XBitmap = xui.LoadBitmap(Result.MediaDir, Result.MediaFile)
Dim OrigWidth As Int = bmp.Width
bmp = bmp.Resize(ImageView1.Width, ImageView1.Height, True)
Dim Scale As Float = OrigWidth / bmp.Width
pnlCanvas.SetLayoutAnimated(0, ImageView1.Left, ImageView1.Top, bmp.Width, bmp.Height)
cvs.ClearRect(cvs.TargetRect)
cvs.Resize(pnlCanvas.Width, pnlCanvas.Height)
cvs.Invalidate
ImageView1.SetBitmap(bmp)
SetWorkingState(True)
Label1.Text = "Reading text from image"
Wait For (ocr.ReadText(File.Combine(Result.MediaDir, Result.MediaFile))) Complete (OcrResults As List)
SetWorkingState(False)
Label1.Text = ""
cvs.ClearRect(cvs.TargetRect)
For Each res As OcrResult In OcrResults
Dim MinX = 100000, MaxX = 0, MinY = 100000, MaxY = 0 As Int
For Each pnt As OcrPoint In res.Points
MinX = Min(pnt.X, MinX)
MinY = Min(pnt.Y, MinY)
MaxX = Max(pnt.X, MaxX)
MaxY = Max(pnt.Y, MaxY)
Next
Dim r As B4XRect
r.Initialize(MinX / Scale, MinY / Scale, MaxX / Scale, MaxY / Scale)
cvs.DrawRect(r, xui.Color_Blue, False, 2dip)
If Label1.Text = "" Then
Label1.Text = res.Text
Else
Label1.Text = Label1.Text & ", " & res.Text
End If
cvs.Invalidate
Next
End If
End Sub