I'm looking for a Tesseract or Google's Vision API type of OCR which can help in extracting textual information in passport / ID card image, (which may be captured from mobile or may be scanned. Hence frame size may vary a little). I have been through several posts, and and found Tesseract as preferred solution.
I also tested my test data using Vision API, and got 99% accurate and satisfactory results. But I have following problems/requirements:
Problems:
Tesseract is the suggested solution that i found on most of the posts i had been through, but it gives very bad results, as frame may vary. I can't train data, and I'm okay with any paid library available to help me in my scenario.
Vision API gives accurate result, but my requirement is to not to use cloud based solution.
There are few providers, (eg, LeadTool, IdScan etc.) which provide this feature, but they use their scanners first to scan the passport. Hence their SDK works for their scanners device.
Summary: Is there any available (paid or opensource) c# library available, which takes passport/cedula image as input, and returns accurate text?. Any suggestion/help will be appreciated.
Company called MicroBlink created BlinkID SDK to scan passports, ID cards. It is not free for commercial usage, but free for development. Link to SDK's site HERE. Tesseract OCR tool may give you false results because you probably have not done any processing for an image before OCR scan, which is mandatory if you want a proper result, especially for images of passports and ID's and so on. For image processing you can use OpenCV (free), but it may take you time to learn computer vision and image processing (which are very rewarding actually).
I'm one of the developers in MicroBlink, which is a company specializing in development of barcode and OCR solutions.
Tesseract is indeed one of the options you have. The problem with Tesseract is that it's hard to set the right parameters to get really accurate OCR results. And you still need to implement the data extraction logic on top of the OCR results. And integration on iOS/Android requires two separate codebases.
Google Cloud Vision gives very accurate OCR result, but as you said, it performs image processing on server side, which raises privacy and security concerns regarding sending private ID information over the network to third parties.
There are other companies developing similar products with similar properties (server side, no data extraction, etc..)
MicroBlink's BlinkID is different in the sense that it performs all processing locally (without server side connection). It uses our proprietary machine-learning based OCR engine to ensure data is captured correctly. It supports MRZ, PDF417 barcodes, and scanning the front side of some ID documents (such as UK Driver's licenses, Malaysian IDs, EU IDs...). All ID data is parsed and verified according to country's standards with checksum validation.
BlinkID is provided as a native iOS, Android and Windows Phone 8 SDKs, Phonegap / Cordova plugins for iOS and Android, and Xamarin component (C#) for iOS and Android.
There are also server side library (available on request) which can run on Linux / Windows / MacOS and which has C API and that can be used from .NET application using C++/CLI. Our development team is here to help with the integration in a .NET app.
Please contact support#microblink.com for more information on the subject.
Asprise C# .NET OCR and Barcode Recognition SDK can recognize both normal text, MRZ data and barcodes on passports and other identity documents. The accuracy rate for MRZ data is extremely high.
You can simply pass input images in formats like BMP, JPG, PNG, PDF or TIFF.
Many government agencies use Asprise OCR to read passport MRZ information.
You may contact Asprise support to obtain a special evaluation version for your scenario.
Just a correction about LEADTOOLS needing to...
"use their scanners first to scan the passport. Hence their SDK
works for their scanners device"
This part is not correct. We do not make or sell any type of scanning device. LEADTOOLS SDKs can use different standard devices (Twain and WIA on Windows, Sane on Linux, and cameras on Android and iOS devices using the operating system's own APIs). The OCR and ID recognition is then done through software.
Related
I am planning to create School Management System in C# and I'm gonna provide these features:
Biometric attendance system
Fee Slip Printing
I did some search and found these 2 products (fits my needs, I think):
Finger Print Reader - ZK4500
Thermal Receipt Printer - XP200 (not official link)
I was about to order these products but I read on a website, Make Sure the Device is compatible with Programming language (in my case C#). I try to find the answer on Google but no luck! :(
I am totally hopeless and helpless but still happy :) because Stack Over Flow community is always here to help and give the right direction.
So, Here are my questions:
Does these devices are configurable with C#? (if possible, please share any helpful resource)
Is it better choice to use receipt printer instead of regular printer?
Is there any better alternative available for fingerprint reader and receipt generator?
PS: I wanted to keep the printer and fingerprint reader cost as low as possible so customer can afford it easily.
I don't know about the ZK4500, but I can guarantee you that the Digital Persona U.are.U series can be used with C#. The SDK can be purchased as part of a package or standalone. I don't know how many devices you need, but I can tell you that I've had fairly good experience with the U.are.U 4500. The scanners are $99 each, SDK not included.
It also comes with examples for implementation with C#. You can choose to let the SDK handle everything for you, which means capturing a print, finding minutiae points, and creating a biometric template for you, or you can capture the raw image and do your own processing. The examples also show how to store it in your database.
Another option if you are set on a particular scanner is the neurotechnology fingerprint SDK. It includes drivers for many scanners and I can verify that it works well with C#.
Yet another option is the Griaule Biometrics SDK. This SDK also supports C# and is easy to use. It does not include drivers and only officially supports 6 scanners. Additionally, it may be a bit more difficult to get these days because Griaule recently changed their website and ended support for the older SDK. They seem to offer new SDKs, but I haven't used their newer products.
Regarding receipt printers...can't help you there.
Been trying Google for a while and haven't even found a start point for this problem.
I am looking for a starting point for developing a check in system. I have a large database of images of inventory in house. Very clean digital HD images with no background or anything. I am looking to do a local image search.
I will have a small temp folder with only the images of products in the current order. Then to verify that the item in employees hand is that same, I want to scan the item in real time and compare it to the images in the folder. and work from there.
I can't seem to find any documentation on any classes that can help me with this functionality.
For example say I have an image on my PC, and I print out that image to paper in a VERY high quality. I want to then be able to match the print out to the original file.
Is there anything built into .Net for this?
I have done something similar in the past. But in my case it was a facial recognition system. It worked pretty well but you have to remember that it might not work in 100% of the cases. Visual recognition is a very complicated subject and we have yet to develop a way to have a flexible 100% accuracy system.
As to how I did it, I developped a NN(Neural Network) algorithm. This algorithm had to be trained against a specific set of pictures.
Another popular approach is to use a SVM(Support Vector Machine) algorithm instead of a neural network. Then again, you will most likely not get a result that is 100% accurate.
Keep in mind that there are many different algorithms that can be used to do visual recognition. Two other popular algorithms for facial recognition are Eigenfaces and Fisherfaces.
Sadly, I have not worked with those kind of project in .Net. But you might want to check for a third party NN or SVM library for .Net.
Here is a link to a SO thread about NN
Open-source .NET neural network library?
Here is a link to a SO thread about SVM
Support Vector Machine library for C#
I need to capture some feedback from a printed paper form. It contains choices to mark and may be some handwritten texts. Completed feedback forms should be scanned/ processed using an OCR tool and stored in a MS SQL Server database.
The system is developed using C#.Net.
Please let me know some your experience. BTW, what about Abbyy FineReader for this?
You are talking about OMR aka Form processing. You will need a toolkit having following features:
OMR /Form processing to read optical marks
ICR to read hand written text
Image processing, to perform image pre - processing to correct image before processing
I had used atalasoft OMR, capturing, image processing and IRIS OCR, ICR.
Good paid solutions:
Abbyy FineReader is good option Atalasoft (basic /intermediate) OMR
feature, great capture and image processing features.
Leatools - provides OMR, OCR, ICR
IRIS (iDRS ocr Engine). difficult to program but great quality OCR, ICR features.
Like Needo mentioned, there are commercial toolkits that supports OCR\OMR technology. We tried some of them and ended up using leadtools and it helped us to capture data from our surveys. You can find more here:
http://support.leadtools.com/CS/forums/37869/ShowPost.aspx
We are trying to find out any technologies/libraries available in .NET stack (even wrappers on top of 3rd party dlls) that'll help us to build an app that can
1 - Capture an image from a user's video device
2 - Upload it realtime to a server
3 - Process the video (in the server) - eg: Adding a watermark to the video
4 - Stream it back to the user/other users
Preferably, the time delay/latency between step2 and 4 should be minimal
The first requirement (capturing) seems pretty straight forward. The challenge is identifying a suitable way to do the upload, do the processing, and stream it back. Any valid suggestions or ideas?
Recently came acrsoss FFmpeg library, and it has a C# wrapper. Does FFmpeg can be used to do the processing side?
I would go about it this way:
Use silverlight or flash to capture the video camera input, e.g. as detailed here.
You can send the byte-stream over a socket that your server is listening to.
On the receiving end, just use the socket-accepting program as a router-program with a number of listening workers connected. Between workers and router-program, e.g. AMQP with RabbitMQ. Send asynchronous messages (e.g. with reactive extensions) with e.g. the stream encoding to the rabbit-node, which then can either further all messages to one single computer as a part of a conversation/user-session, or interleave between the available workers. Here's the manual. As the video is encoded, it is streamed asynchronously over the message bus back. According to intel tests the bus itself should work well at high throughputs, but they had to use the interleaved tcp channel mode (they tested on a gigabit lan). Other users here have suggested FFlib. You might also look into having the workers convert into webM, but if FFlib works, that might be a lot easier. Each worker publishes over AMQP the next encoded video piece. A server-running program, e.g. the router program I talked about before, starts sending to the client (see no. 4)
Have a client-program, e.g. silverlight/flash connect (for example over the same socket that you opened for client->server data, or over HTTP), and read the byte-stream with a decoder. Render the output.
VideoLab from Mitov can accomplish all of this and is free for personal use (not so free for commercial use, but pricing is not too heavy).
I have bought and use the Delphi version and know it works extremely well, so I'm pretty sure the .NET version will do what you need.
This kind of task is not trivial (as seen by the lack of responses here), so expect to struggle considerably with DirectX/Microsoft Media Encoder- but with this toolkit and some help from the author, you will eventually succeed.
http://www.mitov.com/html/videolab.html
It seems that Splicer can process static video and convert it - I'm not sure about processing a realtime uploaded video - http://splicer.codeplex.com/
Take a look at Video.Show by Vertigo. It's an open source website for user-generated video content. It uses the Expression Encoder to handle compression/video editing. It's not exactly what you need, but it's a good start!
You could use Silverlight for capture as is mentioned above, and then use Expression Encoder to push it to a stream server or stream from there directly.
It should have everything you need:
Smart encoding/smart recompression for
WMV if the source is also WMV and no
frame operations are performed [4],
cuts editing, serial batch encoding,
Live encoding from webcams and DV
camcorders
Decoding/import format support because
of DirectShow
Smooth streaming (720p+ video using
HTTP) with optimized client
(Silverlight) and server (IIS with
smooth streaming)
WebDAV publishing, publishing plugins
for Silverlight Streaming, Amazon S3
Importing XAML overlays created in
Expression Design and customizing
their timing, animation, opacity,
placement and looping
JavaScript trigger events
Windows Media 11 SDK and VC-1 SDK
integration, native MPEG-2 decoder
Adding captions to videos using SAMI
or W3C Timed Text format
Previewing and comparing encoding
settings in real time
Screen capture
Object model for the encoding engine,
SDK downloadable separately
The question is kind of short on details (is this a web server, what os is the server? etc) but I'll take a stab based on what I think you're trying to do.
One thing you might consider is doing the capture and process at one time. If the user is running your client app, have that do the capture and processing via DirectShow. Then all you need to do is upload the video and you can skip the entire server process. This is assuming that the 'user' is under your control - that this is not some random person out there uploading video, but an employee or someone otherwise trusted.
If this isnt the case, then ffmpeg can certainly be used to watermark video on your server. You dont really need 'wrappers' for it. You can just call it as a command line app from your server application and wait for it to finish.
The process really isnt that complex... its the details that are going to matter (for example - what does 'stream' mean to you? Do you really mean 'stream', or is this via http? Thats a huge topic right there)
I am wanting to develop an Automatic Attendance System using a thumb reader. When the user enters the office campus, they must put their thumb on to a thumb reader and is then marked as present.
Can anyone suggest a thumb reader that supports API for reading and comparing thumb-print images, so that I can easily integrate it with my attendance system.
I would prefer it if the device supports a Java API.
I have Google'd this a lot, but could not find any good answers.
I came across a Microsoft thumb reader,but i dint get enough information on it.
Does anyone can provide me offical site of Microsoft thumb reader.
Any online stiulator?
I work in company developing such systems. We've successfully used devices by Futronic, both USB (FS80) and ethernet (FS84). The latter provide means for comparison, but AFAIk they aren't very good.
We've used matching algorithms by Sonda Technologies, they are very robust and have good performance. They provide JNI-style java API.
We've also used ethernet sensors by this company, it has better capabilities for indication (LED or text LCD display, and sound) and operating external devices.