B4A Library Barcode reader based on Google Play Services Vision

Status
Not open for further replies.
Better solution: https://www.b4x.com/android/forum/threads/160725/#content

This is not really a library. It is a modification to CameraEx example that adds barcode detection based on Google Play Services Vision. It uses JavaObject to create the detector and detect barcodes in the Preview event.

You should call CreateDetector with the formats you want to detect. Fewer codes will yield faster detections.
List of formats is available here: https://developers.google.com/andro...d/gms/vision/barcode/Barcode#constant-summary
The implementation is quite simplistic as it is done on the main thread. It works good on Nexus 5X. I haven't tested it on low end devices.

Note that you should add this code to the manifest editor:
Code:
<meta-data
    android:name="com.google.android.gms.vision.DEPENDENCIES"
    android:value="barcode" />
 

Attachments

Last edited:
Impressive.

I threw about 7 of the harder types of barcodes I could quickly find at it; 14 devices (Nexus's, Old Galaxy Notes, New-ish Tabs, an old Toshiba tablet, Motorola phones); rounded, crumpled, dirty, various angles and distances and speeds panning across them; and multiple barcodes in the same preview and different types of barcodes at different scales in the same preview 'shot', too. With the exception of the auto-focus not working on some of the devices that I know have that capability (I just uncommented the btnFocus_Click sub and hit the button for it to focus on those), it worked really quite well.

I just called CreateDetector with "ALL_FORMATS". It was plenty fast enough and allowed capturing multiple barcode types at the same time.

[edit] Turns out it wasn't capturing those 'at the same time' but it was capturing each barcode in the preview window so quickly that it looked like it was doing that. Still impressive. I just tried some really horrendous barcodes (broken, very dirty, mostly obscured, very dense) and it did a good job with those, too.

With the multitude of barcode readers on the forum with various and overlapping issues, this is one I'll be testing more. There are a couple of my apps that could use an upgrade and my current B4A project will need this coming up in the Summer.
 
Last edited:
Hi

Is it possible to restrict the barcode detection range?

How I understand it will be managed by
Camera1_Preview (data () As Byte)
the image data is used and in this area the barcodes
searched.

Is it possible to crop this data? i. e. to use an area of the whole preview (see image (detection area) and search for barcodes there.

Best regards
Frank
 

Attachments

  • detection.jpg
    detection.jpg
    66.9 KB · Views: 2,068
Hi,

Tested on Jelly Bean & Lolipop, but nothing happen. Already set to read all format.
Code:
CreateDetector (Array("ALL_FORMATS"))

Is there minimum OS for this to run?
 
Hi,

My Barcode is Code 39. Output for Is detector operational always true, no matter what format used.

1) Nothing happen with this code
Code:
 CreateDetector (Array("ALL_FORMATS","CODE_128","CODE_93"))

2) Worked OK with this code
Code:
 CreateDetector (Array("CODE_39"))

After 2nd phase, change codes to
Code:
 CreateDetector (Array("ALL_FORMATS"))
still worked OK

Changed again to code on 1st phase, didn't worked.
 
All,
Away from my pc these days so can't test. Please pardon a couple of questions:
1. Does it need to connect to online Google services site? It's blocked over here.
2. Does it also read QR codes?

Best regards. B
 
@Beja
>Does it need to connect to online Google services site? It's blocked over here.<
no.
Wifi + Sim off.
it works :)

>Does it also read QR codes?<
yes :)
 
@Beja
>Does it need to connect to online Google services site? It's blocked over here.<
no.
Wifi + Sim off.
it works :)

>Does it also read QR codes?<
yes :)

Thanks Frank, but I am just wondering why's the need for Wi-Fi if doesn't need to use online Google services.. If it sends any request or query to Google.com/bla bla bla, then it wouldn't work here
 
Thanks Frank, but I am just wondering why's the need for Wi-Fi if doesn't need to use online Google services.. If it sends any request or query to Google.com/bla bla bla, then it wouldn't work here
the engine is part of Google Vision (installed on Android) and does not need to connect to somewhere... As far as i know!
 
It doesn't require an internet connection. It might need to download information on the first run though it didn't require anything when I tested it.
See this link: https://developers.google.com/visio...rial#querying_the_detector_operational_status

I haven't added it to the example project however you should add this to the manifest editor:
Code:
<meta-data
    android:name="com.google.android.gms.vision.DEPENDENCIES"
    android:value="barcode" />

This tells the OS that it should download the barcode library during installation.
 
That's a great and flexible way to read barcodes! Thanks a lot!

Is it possible to restict the size of the preview images?
I would like to use only half of the screen for the preview, not the complete screen. If I simply shrink the preview panel the image gets distorted.

I could take the full-screen panel, cover half of it and then try to do as you have suggested above, i.e. take the full-size preview, convert it to jpeg, crop it and then analyze only the half of the picture that is actually visible on screen.
But restricting the initial full screen preview images to half screen size would be much easier.

thanks,
Johannes
 
Hello Erel,
is there a way to identify / markup recognised barcodes in the preview?
At the moment no one can be sure which barcodes are recognised.

Thank you,

Michael
 
Status
Not open for further replies.
Back
Top