Selamlar.
optik okuyucuların yaptığını bizim normal tarayıcıda taratarak yazılım ile yapmamız için nasıl bir yol izlememiz, neleri öğrenmemiz gerekir?
Teşekkürler.
yazılım ile optik okuyucu?
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Optik okuyucu
Selam,
hbahadir'in verdiği linkteki yazıları okudum ve buna rağmen bir şeyler eklemek gereği hissetttim.
Öncelikle ScanLine mantığını öğrenmek gerekecek. Bunun kafanda tam oturması için de resimlerin bellekte nasıl tutulduğunu öğrenmen gerekecek. Buraya kadar olan kısım işin kolay kısmı.
Daha sonra en azından basit de olsa rotate ve deskew fonksiyonlarını öğrenmen gerekecek (Scanner'dan taranırken garanti bir yamukluk olacaktır)
Çekilen resmin temizlenmesi ve process time'ın düşürülmesi için despeckle öğrenmen gerekecek (Küçük siyah noktaların temizlenmesi, bu aslında çok önemli değil, sadece performansı biraz daha arttırmak istersen işine yarayabilir. Hatta Photoshopla tarama yaptırıyorsan basit bir actionla bunu Photoshop'a da yaptırabilirsin)
En son olarak da sağlam bir algoritma kurman gerekecek. Şimdi izninle benim tavsiyelerimi yazayım.
1. Normalde OCR işlemlerinin hepsinde, Black&White (Lineart) resimlerle çalışılır. Bu resimler 1 bittir, ama 1 bit resimlerin scanline mantığı ile işlenmesi yavaş olur. Sürekli bitwise operasyon gerektirir. Ben senin yerinde olsam, basit bir resim formatı tasarlarım, ve 1 bit resimleri, 8 bit olarak tutar, ama sadece 0 ve 255 değerlerini alır. Böylece döngülerin inanılmaz derecede hızlanır. Bu yöntem tarafımdan test edilmiş ve kesinlikle onay almıştır (Performans farkı inanılmaz yüksek)
2. Rotate fonksiyonları, özellikle nette bulacakların, 24 bit resimler için güzel olmasına rağmen, B&W ve büyük resimler için rezalettir. Çünkü bu resimlerde, resmin büyük bir kısmı beyaz olduğu için algoritma neredeyse %70 oranında boşa çalışır. Bunun yerine kendin bir rotate fonksiyonu hazırla ve sadece siyah noktaların rotate edilmiş değerlerini hesaplayıp boş bembeyaz bir resimde o koordinatları siyaha boya. Performans inanılmaz derecede yükselecektir. Burada tek sıkıntı B&W resimlerde yapılan küçük dereceli rotasyonlarda resmin çok fazla bozulmasıdır. Ama sen optik form kullanacağın için böyle bir sorunun olmayacak. Bu da tarafımdan test edilmiş ve onay almıştır
3. Mutlaka bir referans noktası belirle. Bunun için de işi iki parçaya böl. Önce resimlerin hepsi taransın, sonra da bir senin programın çalışsın. Senin programın bir nevi batch processing yapacak. Bunun sebebi de şu. Taradığın resimlerden bir tanesi cevap anahtarı olsun ve kullanıcı hangisinin cevap anahtarı olduğunu programa belirtsin. Sen de diğer bütün resimleri, cevap anahtarına uydurursun. Kullanıcı ayrıca programa, cevap anahtarının bazı özelliklerini de girsin (soru sayısı, sütun sayısı gibi) Ve hatta eğer zorlanacak olursan, cevap anahtarında belirli regionlar tanımlamasını bile şart koşabilirsin. (Diğer forumda da yazıldığı gibi bu işlemin sonucu kesinlikle hata kabul etmez)
4. Bundan sonra aslında iş sağlam bir döngüye kalıyor sanırım. Her bir formun sonuçlarını kaydet ve benim tavsiyem, kullanıcının sonuçları görsel olarak da kontrol etmesine imkan ver (Örneğin cevap anahtarında C şıkkı formda B işaretlenmiştir. Sen bu kağıt üzerinde, doğru cevabı mavi, yanlış cevabı da kırmızı ile işaretlersen, sonuçların kontrolü de inanılmaz derecede hızlı olacaktır.
Şimdilik aklıma gelenler bunlar,
Kolay gelsin
Bahadır Alkaç
hbahadir'in verdiği linkteki yazıları okudum ve buna rağmen bir şeyler eklemek gereği hissetttim.
Öncelikle ScanLine mantığını öğrenmek gerekecek. Bunun kafanda tam oturması için de resimlerin bellekte nasıl tutulduğunu öğrenmen gerekecek. Buraya kadar olan kısım işin kolay kısmı.
Daha sonra en azından basit de olsa rotate ve deskew fonksiyonlarını öğrenmen gerekecek (Scanner'dan taranırken garanti bir yamukluk olacaktır)
Çekilen resmin temizlenmesi ve process time'ın düşürülmesi için despeckle öğrenmen gerekecek (Küçük siyah noktaların temizlenmesi, bu aslında çok önemli değil, sadece performansı biraz daha arttırmak istersen işine yarayabilir. Hatta Photoshopla tarama yaptırıyorsan basit bir actionla bunu Photoshop'a da yaptırabilirsin)
En son olarak da sağlam bir algoritma kurman gerekecek. Şimdi izninle benim tavsiyelerimi yazayım.
1. Normalde OCR işlemlerinin hepsinde, Black&White (Lineart) resimlerle çalışılır. Bu resimler 1 bittir, ama 1 bit resimlerin scanline mantığı ile işlenmesi yavaş olur. Sürekli bitwise operasyon gerektirir. Ben senin yerinde olsam, basit bir resim formatı tasarlarım, ve 1 bit resimleri, 8 bit olarak tutar, ama sadece 0 ve 255 değerlerini alır. Böylece döngülerin inanılmaz derecede hızlanır. Bu yöntem tarafımdan test edilmiş ve kesinlikle onay almıştır (Performans farkı inanılmaz yüksek)

2. Rotate fonksiyonları, özellikle nette bulacakların, 24 bit resimler için güzel olmasına rağmen, B&W ve büyük resimler için rezalettir. Çünkü bu resimlerde, resmin büyük bir kısmı beyaz olduğu için algoritma neredeyse %70 oranında boşa çalışır. Bunun yerine kendin bir rotate fonksiyonu hazırla ve sadece siyah noktaların rotate edilmiş değerlerini hesaplayıp boş bembeyaz bir resimde o koordinatları siyaha boya. Performans inanılmaz derecede yükselecektir. Burada tek sıkıntı B&W resimlerde yapılan küçük dereceli rotasyonlarda resmin çok fazla bozulmasıdır. Ama sen optik form kullanacağın için böyle bir sorunun olmayacak. Bu da tarafımdan test edilmiş ve onay almıştır

3. Mutlaka bir referans noktası belirle. Bunun için de işi iki parçaya böl. Önce resimlerin hepsi taransın, sonra da bir senin programın çalışsın. Senin programın bir nevi batch processing yapacak. Bunun sebebi de şu. Taradığın resimlerden bir tanesi cevap anahtarı olsun ve kullanıcı hangisinin cevap anahtarı olduğunu programa belirtsin. Sen de diğer bütün resimleri, cevap anahtarına uydurursun. Kullanıcı ayrıca programa, cevap anahtarının bazı özelliklerini de girsin (soru sayısı, sütun sayısı gibi) Ve hatta eğer zorlanacak olursan, cevap anahtarında belirli regionlar tanımlamasını bile şart koşabilirsin. (Diğer forumda da yazıldığı gibi bu işlemin sonucu kesinlikle hata kabul etmez)
4. Bundan sonra aslında iş sağlam bir döngüye kalıyor sanırım. Her bir formun sonuçlarını kaydet ve benim tavsiyem, kullanıcının sonuçları görsel olarak da kontrol etmesine imkan ver (Örneğin cevap anahtarında C şıkkı formda B işaretlenmiştir. Sen bu kağıt üzerinde, doğru cevabı mavi, yanlış cevabı da kırmızı ile işaretlersen, sonuçların kontrolü de inanılmaz derecede hızlı olacaktır.
Şimdilik aklıma gelenler bunlar,
Kolay gelsin
Bahadır Alkaç
2 nci madde
OPT2000 ikinci maddeyi biraz açıklarmısınız... Tam anlıyamadım..