Tesseract ve OpenCV arasında nasıl seçim yaparım? [kapalı]


94

Yakın zamanda Tesseract ve OpenCV ile karşılaştım . Görünüşe göre Tesseract tam teşekküllü bir OCR motoru ve OpenCV bir OCR uygulaması / hizmeti oluşturmak için bir çerçeve olarak kullanılabilir.

Bazı resimlerimde Tesseract kullanmayı denedim ve doğruluğu iyi görünüyor. Daha sonra, Python kullanarak OCR gerçekleştirmek için OpenCV'yi kullanma konusunda çok basit bir öğreticiyle karşılaştım ve etkilendim. Birkaç dakika içinde sistemin eğitimini bitirdim ve doğruluğu iyiydi. Ancak elbette, bu yaklaşımı benimsemek, sistemimi geniş bir eğitim seti kullanarak kapsamlı bir şekilde eğitmem gerektiği anlamına geliyor.

Benim spesifik sorularım şunlar:

  • Tesseract ile özel bir OCR uygulaması oluşturmak için OpenCV kullanmak arasında nasıl bir seçim yapılabilir?
  • Tesseract için farklı diller için kullanılabilen eğitim veri kümeleri vardır. OpenCV'de benzer bir şey var mı, böylece OCR'ye ulaşmak için sıfırdan başlamama gerek kalmaz mı?
  • Ticari olmak isteyen bir uygulama için hangisi daha iyidir?

Herhangi bir öneri?


8
Aşağıdaki cevaplar gerçekten harika, ancak OCR ile çalışan biri olarak, Tesseract'taki tanınma kalitesinin ticari bir uygulama kullanıcısının beklentilerinin altında olduğunu söyleyebilirim. Tesseract harika, ancak OCR zordur - çevrimiçi eğitim gibi şeyler veya anında iyileştirmeler hmmm ... hala araştırma. Son zamanlarda TS'nin arkasındaki büyük sponsor olan Google, kendi motorunu - OCROpus'u oluşturmaya karar verdi. Ve açık kaynak kullanma sözü vermesine rağmen, çekirdek tanıma motoru henüz mevcut değil - sadece bir çerçeve yayınladılar - bu, tesseract için bir API'dir.
Sam

3
@vasile: Bu çok bilgilendirici. OCROpus'tan haberdar değildim. Teşekkür ederim. Nihai amacım bir kartvizit OCR yazmak (veya bağladığım gibi benzin istasyonu makbuzlarını okuyan bir tane demek: upload.wikimedia.org/wikipedia/en/3/34/… demek) alternatifler için herhangi bir öneriniz olur mu? )? Soruyorum çünkü çok sayıda mobil uygulamanın bunu başarmak için ne kullandığını merak ediyorum. OCR'yi sunucu tarafında yapmak benim için sorun değil. Bu harika demoyu gördükten sonra OpenCV kullanmaya başladım: youtube.com/watch?v=OkcOfS1lTxs
Legend

6
Bir dizi ticari OCR motoru var, sadece google OCR accuracy testsve bazı grafikler bulacaksınız. Ve mobil uygulamalardan bahsederken, çoğu tesseract kullanıyor. Ancak bazılarını indirmeye zahmet ederseniz, sonuçların vaatlerden biraz farklı olduğunu göreceksiniz. Genellikle dikkatlice kontrol edilen bir ortamda video demosu yaparlar ve youtube'da yayınlarlar, ancak vahşi ortamda, bir sayfa / tarif / kart / her ne olursa olsun, bazı komik sonuçlar alırsınız.
Sam

1
@vasile: Teşekkür ederim. Bu gece beni meşgul edecek bir şey. Zaman ayırdığınız için gerçekten minnettarım.
Efsane

Yanıtlar:


78
  • Tesseract bir OCR motorudur. Google tarafından özellikle resimlerden metin okumak, temel belge bölümlendirmesi yapmak ve belirli resim girdileri (tek bir kelime, satır, paragraf, sayfa, sınırlı sözlükler vb.) Üzerinde çalışmak için kullanılır, üzerinde çalışılır ve finanse edilir.

  • Öte yandan OpenCV, bazı özellik çıkarma ve veri sınıflandırması yapmanıza izin veren özellikler içeren bir bilgisayar görüntü kitaplığıdır. Temel OCR'yi gerçekleştiren basit bir harf segmenter ve sınıflandırıcı oluşturabilirsiniz, ancak bu çok iyi bir OCR motoru değildir (Python'da daha önce sıfırdan yaptım. Eğitim verilerinizden sapan girdi için gerçekten yanlıştır).

OCR'nin ne kadar zor olduğu hakkında temel bir anlayış elde etmek istiyorsanız, OpenCV'yi deneyin. Tesseract gerçek OCR içindir.


3
Bu, girdi resimlerinize bağlıdır. Tesseract, harfler net, yatay bir çizgi halinde, aralıklı, bağlantılı değil ve mükemmel siyah beyaz olduğunda en iyi şekilde çalışır. Yaklaşık bir yıl boyunca DIY kitap tarama / koruma topluluğunda kurcaladım ve boş zamanlarımda süreci kolaylaştırmak için yazılım üzerinde çalıştım. En iyi post-işlem için (ticari veya değil) orada yazılım herhangi metinle görüntüleri olan Tara Terzi . Bazı CLI seçenekleri var, ancak nasıl çalıştığını görmek için biraz zaman ayırırsanız, oldukça şaşırtıcı.
Blender

2
Scan Tailor'ın kaynak kodu üzerinde biraz çalıştım ve dahili olarak OpenCV kullanmıyor, ancak oluşturulan algoritmaların çoğu OpenCV'nin işlevleriyle gerçekten kolayca yeniden yazılabilir. Görüntüleriniz eğriltilmemişse ve bozulmamışsa, görüntünüzü Tesseract'a beslemeden önce gerçekten sadece uyarlanabilir ikilileştirme ve bazı basit küçültme uygulamanız gerekir.
Blender

1
Sorunuzla ilgili olarak, dün bazı rastgele girdi resimlerini test ediyordum. Bir benzin istasyonundan bir makbuz denedim: upload.wikimedia.org/wikipedia/en/3/34/…0 Bir 8(toplam 20.00 $) olarak tanıdı . Bu rakamı deşifre etmenin bile zor olduğunu kabul ediyorum, ancak Tesseract'ı bu durumlara uyarlamak için başka ne yapılabileceğinden veya aktif bir kullanıcı tabanım olacaksa belki bir öğrenme bileşeni tanıttığından emin değildim.
Efsane

5
Tesseract, belirli yazı tipi setlerini okumak için eğitilmiştir. Bu bloklu harfler onlardan biri değil. Google'a bir hayvan kurbanlığı sunmanız ve Tesseract'ı kendiniz eğitmeyi
Blender

1
Ayrıca, bu harfleri okumak için özel bir OCR motoru yazmaya başlamadan önce, doğru olmasını beklemeyin. Çarkıfeleği otomatikleştirmek için bir tane yazdım ve örnek görüntüler (çevrimiçi bir oyunun ekran görüntüleri) JPEG'ti. Her bir karakterin yaklaşık 10-20 örnek görüntüsünü sağlamadığım sürece, JPEG sıkıştırmasından elde edilen yapaylıklar görüntü sınıflandırıcıyı bozmaya yetti.
Blender

65

Bahsettiğiniz rakam tanıma eğitiminin yazarıyım ve bunun tesseract'ın yerini hiçbir şekilde ikame etmediğini söyleyebilirim.

Tesseract gerçekten iyi bir OCR motorudur, en iyi Açık Kaynak OCR motoru olabilir.

Bahsettiğiniz eğitim, OCR'nin en basit çalışmasını anlamak için sadece bir denemedir.

Bu yüzden, OCR uygulaması arıyorsanız, görüntüyü önişlemek için OpenCV kullanmanızı ve ardından tesseract motorunu uygulamanızı tavsiye ederim.


1
+1 Teşekkürler. Öncelikle eğitim için teşekkür ederim :) Gerçekten ilginç bir okumaydı. Tesseract ile birlikte OpenCV'nin nasıl kullanılacağına dair herhangi bir referans / öğreticiden haberdar mısınız? Arabirimden bahsetmiyorum, ancak Tesseract'in doğruluğunu artırmak için yapılması gereken görüntü dönüşümleri veya ön işleme türleri mi?
Efsane

2
Sadece söylemek isterim ki, Tesseract diğerlerine kıyasla iyi bir OCR motoru olsa da, hala oldukça yanlıştır, doğru metnin tanınmasında yaklaşık% 40'lık bir başarı oranına sahip olduğumu söylemek isterim. Umarım birkaç yıl içinde daha iyi olur.
GangstaGraham

4
@GangstaGraham Sadece tesseract'ı eğitmeniz gerekiyor ve yıllar değil birkaç saat veya gün içinde daha iyi sonuçlar elde edebilirsiniz. opensource.newmediaist.com/tesseract-training.html
valentt

1
Gerçek zamanlı metin çıkarma için PyTesseract kullanıyorum. Linux PC'de iyi çalışıyor ancak Raspberry Pi ortamında çok yavaş ... Hafif sürüm kurmanın bir yolu var mı? Örneğin, yalnızca İngiliz alfabesinin rakamlarını ve büyük harflerini mi işlemek?
Yuriy Chernyshov

9

İkisi tamamlayıcı olabilir. OpenCV'deki makaleyi okursanız: https://github.com/tesseract-ocr/docs/blob/master/tesseracticdar2007.pdf

"HP, ürünlerde kullanılan (ve bu nedenle açık kaynak için piyasaya sürülmeyen) bağımsız olarak geliştirilmiş bir sayfa düzeni analiz teknolojisine sahip olduğundan, Tesseract hiçbir zaman kendi sayfa düzeni analizine ihtiyaç duymadı. Bu nedenle, Tesseract, girdisinin bir ikili görüntü olduğunu varsayar. isteğe bağlı poligonal metin bölgeleri tanımlandı. "

Bu tür bir görev OpenCV tarafından gerçekleştirilebilir ve elde edilen görüntü Tesseract'a devredilebilir. Git deposunda bu tür kodun bir örneğini bulabilirsiniz: https://github.com/Itseez/opencv_contrib/tree/master/modules/text/samples Örnekler, görüntüden metne dönüştürme yapmak için Tesseract API'lerini kullanır.


3

OpenCV, genel olarak görüntüleri analiz etmek ve işlemek için kullanılan bir CV kitaplığıdır . Tesseract, görüntülerden metin çıkarmaya adanmış özel bir CV alt kümesi olan OCR için bir kitaplıktır .

Gönderen OpenCV.org

..... yüzleri algılamak ve tanımak, nesneleri tanımlamak, videolarda insan eylemlerini sınıflandırmak, kamera hareketlerini izlemek, hareketli nesneleri izlemek, nesnelerin 3B modellerini çıkarmak, stereo kameralardan 3B nokta bulutları oluşturmak, görüntüleri birleştirerek yüksek tüm sahnenin çözünürlük görüntüsünü, bir görüntü veritabanından benzer görüntüleri bulun, flaş kullanılarak çekilen görüntülerden kırmızı gözleri kaldırın, göz hareketlerini izleyin, manzarayı tanıyın ve artırılmış gerçeklikle üst üste koymak için işaretler oluşturun, vb.

Gönderen tesseract Github :

..... doğrudan veya (programcılar için) daktilo edilmiş, el yazısıyla yazılmış veya görüntülerden basılmış metinleri çıkarmak için bir API kullanarak kullanılabilir. Çok çeşitli dilleri destekler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.