Closed hyderlyger closed 7 years ago
@hyderlyger can you share the project?
TesseractApi _api = new TesseractApi (this, AssetsDeployment.OncePerInitialization); _api.Init ("eng");
when i debugging code and check _api intialized value it is returning false
I turned out to be using wrong language files i.e version 3.* , it worked fine with version 2.* files. Thanks for your reply though. :) P.S. i think the link you have given for the language files has been modified and this project is not working with those files. Have a look at that so other people don't get stuck.
@hyderlyger can you send me version 2.\ files so i can check this issue
@rakesh79mca you do not await the Init method. Hence it's not initialised.
@hyderlyger thanks, I will check that!
@halkar
Please let me know where i am wrong? I have added await the init method.
[Activity (Label = "ReceiptScanner", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class TextureViewActivity : Activity, ISurfaceHolderCallback, Android.Hardware.Camera.IPreviewCallback
{
private bool syncObj = false;
Android.Hardware.Camera camera;
TesseractApi _api;
protected override async void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
_api = new TesseractApi(this, AssetsDeployment.OncePerInitialization);
await _api.Init("eng");
SurfaceView cameraSurface = FindViewById<SurfaceView>(Resource.Id.cpPreview);
ISurfaceHolder holder = cameraSurface.Holder;
holder.AddCallback(this);
holder.SetType(SurfaceType.PushBuffers);
}
public async void OnPreviewFrame (byte[] data, Android.Hardware.Camera camera)
{
if (syncObj)
return;
if (!_api.Initialized)
return;
syncObj = true;
await _api.SetImage (ConvertYuvToJpeg (data, camera));
var results = _api.Results (PageIteratorLevel.Block);
foreach (var result in results) {
Log.Debug ("TextureViewActivity", "Word: \"{0}\", confidence: {1}", result.Text, result.Confidence);
}
syncObj = false;
}
public void SurfaceChanged (ISurfaceHolder holder, Format format, int width, int height)
{
}
public void SurfaceCreated (ISurfaceHolder holder)
{
if (camera == null) {
this.camera = Android.Hardware.Camera.Open ();
this.camera.SetPreviewDisplay (holder);
this.camera.SetPreviewCallback (this);
this.camera.StartPreview ();
}
}
public void SurfaceDestroyed (ISurfaceHolder holder)
{
}
private byte[] ConvertYuvToJpeg (byte[] yuvData, Android.Hardware.Camera camera)
{
var cameraParameters = camera.GetParameters ();
var width = cameraParameters.PreviewSize.Width;
var height = cameraParameters.PreviewSize.Height;
var yuv = new YuvImage (yuvData, cameraParameters.PreviewFormat, width, height, null);
var ms = new MemoryStream ();
var quality = 80; // adjust this as needed
yuv.CompressToJpeg (new Rect (0, 0, width, height), quality, ms);
var jpegData = ms.ToArray ();
return jpegData;
}
}
}
@hyderlyger can you help me on this it is urgent for me
Please let me know where i am wrong? I have added await the init method.
[Activity (Label = "ReceiptScanner", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class TextureViewActivity : Activity, ISurfaceHolderCallback, Android.Hardware.Camera.IPreviewCallback
{
private bool syncObj = false;
Android.Hardware.Camera camera;
TesseractApi _api;
protected override async void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
_api = new TesseractApi(this, AssetsDeployment.OncePerInitialization);
await _api.Init("eng");
SurfaceView cameraSurface = FindViewById<SurfaceView>(Resource.Id.cpPreview);
ISurfaceHolder holder = cameraSurface.Holder;
holder.AddCallback(this);
holder.SetType(SurfaceType.PushBuffers);
}
public async void OnPreviewFrame (byte[] data, Android.Hardware.Camera camera)
{
if (syncObj)
return;
if (!_api.Initialized)
return;
syncObj = true;
await _api.SetImage (ConvertYuvToJpeg (data, camera));
var results = _api.Results (PageIteratorLevel.Block);
foreach (var result in results) {
Log.Debug ("TextureViewActivity", "Word: \"{0}\", confidence: {1}", result.Text, result.Confidence);
}
syncObj = false;
}
public void SurfaceChanged (ISurfaceHolder holder, Format format, int width, int height)
{
}
public void SurfaceCreated (ISurfaceHolder holder)
{
if (camera == null) {
this.camera = Android.Hardware.Camera.Open ();
this.camera.SetPreviewDisplay (holder);
this.camera.SetPreviewCallback (this);
this.camera.StartPreview ();
}
}
public void SurfaceDestroyed (ISurfaceHolder holder)
{
}
private byte[] ConvertYuvToJpeg (byte[] yuvData, Android.Hardware.Camera camera)
{
var cameraParameters = camera.GetParameters ();
var width = cameraParameters.PreviewSize.Width;
var height = cameraParameters.PreviewSize.Height;
var yuv = new YuvImage (yuvData, cameraParameters.PreviewFormat, width, height, null);
var ms = new MemoryStream ();
var quality = 80; // adjust this as needed
yuv.CompressToJpeg (new Rect (0, 0, width, height), quality, ms);
var jpegData = ms.ToArray ();
return jpegData;
}
}
}
@rakesh79mca what result do you get from await _api.Init("eng")?
api.Init("eng") is returning false even though i have added lang files in assets. (Droid)