OCR (Optik Karakter Tanıma) Nedir ?
Optik karakter tanıma (OCR), taranan belgeler gibi metin görüntülerini gerçek metin karakterlerine çevirir. Metin tanıma olarak da bilinen OCR, taranmış görüntülerin içinde normal olarak kilitli durumda bulunan metni düzenleyip yeniden kullanmaya olanak sağlar. OCR sayfadaki noktalama işaretleri, boşluklar ve satır sonları da içinde olmak üzere her bir metin karakterini tanımlamak için, desen tanıma adı verilen bir tür yapay zeka kullanır.
OCR Teknolojisini, C# yazılımlarımızda kullanabilmek için Microsoft Office Document İmaging - MODI - kütüphanesine sahip olmamız gerekmektedir. MODI Office 2003 ve 2007 'de Office paketi ile birlikte kurulu gelmektedir.
Detaylı kurulum rehberi için tıklayın : MODI Yükleme Yardımcısı
Eğer Office 2010 veya 2013 kullanıyorsanız, Office SharePoint Designer 2007 yükleyerek, yükleme seçeneklerinden Microsoft Office Document Imaging Tool'u seçerek kütüphaneyi elde edebilirsiniz.
C# Projenize References bölümünden MODI library'i ekledikten sonra aşağıda OCR'nin bir uygulamasını inceleyebilirsiniz.
Aşağıda, www.pokemon-vortex.com isimli web tabanlı oyunda kullanılmak üzere geliştirdiğim C# yazılımının kodları bulunmaktadır. Oyunda tüm rozetleri biriktirdikten sonra haritada dolanırken yüksek seviyeli "efsane-legend" pokemonlar yakalama şansınız var. Yaklaşık binde bir olasılıkla karşılaşacağınız bu pokemonları yakalamak için OCR kullanabiliriz.
Yazılım şöyle çalışmaktadır :
1 - Ekranın belirli koordinatlarında beliren pokemon seviyesini ScreenShot olarak kaydeder.
2- OCR fonksiyonu bize resimdekileri sayı formatına çevirir.
3 - Bir textboxt'ta bunları kontrol ederiz. Eğer elde ettiğimiz sayı 80'den büyükse Fight butonuna basar, pokemonu elde ederiz.
4 - Eğer sayı 80 leveldan küçükse, ok tuşlarına basarak devam eder.
5 - (Bu maddenin detaylarına SMTP Tabanlı Mail Gönderiminden erişebilirsiniz.) Eğer 80 level üstü bir pokemon bulunursa, tanımlı mail adresine pokemonun fotoğrafı mail atılır. Bu bir otonom yapay zekadır.
** Yazılımda Bounty kütüphanesinin çalışabilmesi için Mouse.cs dosyasını indirmelisiniz.
OCR Teknolojisini, C# yazılımlarımızda kullanabilmek için Microsoft Office Document İmaging - MODI - kütüphanesine sahip olmamız gerekmektedir. MODI Office 2003 ve 2007 'de Office paketi ile birlikte kurulu gelmektedir.
Detaylı kurulum rehberi için tıklayın : MODI Yükleme Yardımcısı
Eğer Office 2010 veya 2013 kullanıyorsanız, Office SharePoint Designer 2007 yükleyerek, yükleme seçeneklerinden Microsoft Office Document Imaging Tool'u seçerek kütüphaneyi elde edebilirsiniz.
C# Projenize References bölümünden MODI library'i ekledikten sonra aşağıda OCR'nin bir uygulamasını inceleyebilirsiniz.
Aşağıda, www.pokemon-vortex.com isimli web tabanlı oyunda kullanılmak üzere geliştirdiğim C# yazılımının kodları bulunmaktadır. Oyunda tüm rozetleri biriktirdikten sonra haritada dolanırken yüksek seviyeli "efsane-legend" pokemonlar yakalama şansınız var. Yaklaşık binde bir olasılıkla karşılaşacağınız bu pokemonları yakalamak için OCR kullanabiliriz.
Yazılım şöyle çalışmaktadır :
1 - Ekranın belirli koordinatlarında beliren pokemon seviyesini ScreenShot olarak kaydeder.
2- OCR fonksiyonu bize resimdekileri sayı formatına çevirir.
3 - Bir textboxt'ta bunları kontrol ederiz. Eğer elde ettiğimiz sayı 80'den büyükse Fight butonuna basar, pokemonu elde ederiz.
4 - Eğer sayı 80 leveldan küçükse, ok tuşlarına basarak devam eder.
5 - (Bu maddenin detaylarına SMTP Tabanlı Mail Gönderiminden erişebilirsiniz.) Eğer 80 level üstü bir pokemon bulunursa, tanımlı mail adresine pokemonun fotoğrafı mail atılır. Bu bir otonom yapay zekadır.
** Yazılımda Bounty kütüphanesinin çalışabilmesi için Mouse.cs dosyasını indirmelisiniz.
Kaynak Kodu :
//C++ Programming Language
// zafercavdar
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Bounty;
namespace CursorSet
{
public partial class Form1 : Form
{
int izin = 0;
Mouse MyMouse = new Mouse();
public Form1()
{
InitializeComponent();
sagsol.Start();
//imageprocess.Start();
}
private void Form1_Load(object sender, EventArgs e)
{
}
Bitmap Screenshot()
{
Bitmap Screenshot = new Bitmap(128, 32);
Graphics GFX = Graphics.FromImage(Screenshot);
GFX.CopyFromScreen(799, 616, 0, 0, Screen.PrimaryScreen.Bounds.Size);
return Screenshot;
}
private void sagsol_Tick(object sender, EventArgs e)
{
if (izin == 1)
{
int x = 0;
int y = 0;
Random rnd = new Random();
int a = rnd.Next(1, 3);
if (a == 1)
{
x = +177;
y = 113;
}
if (a == 2)
{
x = +372;
y = 120;
}
Cursor = new Cursor(Cursor.Current.Handle);
Cursor.Position = new Point(x, y);
MyMouse.SendDoubleClick();
//System.Threading.Thread.Sleep(1000);
izin = 0;
}
}
private void imageprocess_Tick(object sender, EventArgs e)
{
/*Directory.CreateDirectory("C:\\Users\\Zaf\\Desktop\\Pokemon");
Screenshot().Save("C:\\Users\\Zaf\\Desktop\\Pokemon\\Ekran Görüntüsü.jpg");
pictureBox1.Image = Screenshot();
pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
try
{
MODI.Document belge = new MODI.Document();
belge.Create("C:\\Users\\Zaf\\Desktop\\Pokemon\\Ekran Görüntüsü.jpg");
belge.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);
foreach (MODI.Image resim in belge.Images)
{
MODI.Layout plan = resim.Layout;
richTextBox1.Text = plan.Text;
}
belge.Close();
}
catch (Exception hata)
{
MessageBox.Show(hata.Message.ToString(), "Hata..!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
bool ok = false;
for (int i = 10; i <= 20; i++)
{
if (richTextBox1.Text.IndexOf(i + "") > 0)
{
ok = true;
MessageBox.Show("EFSANE POKEMON BULUNDU");
imageprocess.Stop();
sagsol.Stop();
break;
}
}
if (ok == false)
{
izin = 1;
}*/
}
private void button5_Click(object sender, EventArgs e)
{
Directory.CreateDirectory("C:\\Users\\Zaf\\Desktop\\Pokemon");
Screenshot().Save("C:\\Users\\Zaf\\Desktop\\Pokemon\\asd.jpg");
pictureBox1.Image = Screenshot();
pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
try
{
MODI.Document belge = new MODI.Document();
belge.Create("C:\\Users\\Zaf\\Desktop\\Pokemon\\asd.jpg");
belge.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);
foreach (MODI.Image resim in belge.Images)
{
MODI.Layout plan = resim.Layout;
richTextBox1.Text = plan.Text;
}
belge.Close();
}
catch (Exception hata)
{
MessageBox.Show(hata.Message.ToString(), "Hata..!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
bool ok = false;
for (int i = 10; i <= 20; i++)
{
if (richTextBox1.Text.IndexOf(i + "") > 0)
{
ok = true;
MessageBox.Show("EFSANE POKEMON BULUNDU");
imageprocess.Stop();
sagsol.Stop();
break;
}
}
if (ok == false)
{
izin = 1;
}
}
}
}
// zafercavdar
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Bounty;
namespace CursorSet
{
public partial class Form1 : Form
{
int izin = 0;
Mouse MyMouse = new Mouse();
public Form1()
{
InitializeComponent();
sagsol.Start();
//imageprocess.Start();
}
private void Form1_Load(object sender, EventArgs e)
{
}
Bitmap Screenshot()
{
Bitmap Screenshot = new Bitmap(128, 32);
Graphics GFX = Graphics.FromImage(Screenshot);
GFX.CopyFromScreen(799, 616, 0, 0, Screen.PrimaryScreen.Bounds.Size);
return Screenshot;
}
private void sagsol_Tick(object sender, EventArgs e)
{
if (izin == 1)
{
int x = 0;
int y = 0;
Random rnd = new Random();
int a = rnd.Next(1, 3);
if (a == 1)
{
x = +177;
y = 113;
}
if (a == 2)
{
x = +372;
y = 120;
}
Cursor = new Cursor(Cursor.Current.Handle);
Cursor.Position = new Point(x, y);
MyMouse.SendDoubleClick();
//System.Threading.Thread.Sleep(1000);
izin = 0;
}
}
private void imageprocess_Tick(object sender, EventArgs e)
{
/*Directory.CreateDirectory("C:\\Users\\Zaf\\Desktop\\Pokemon");
Screenshot().Save("C:\\Users\\Zaf\\Desktop\\Pokemon\\Ekran Görüntüsü.jpg");
pictureBox1.Image = Screenshot();
pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
try
{
MODI.Document belge = new MODI.Document();
belge.Create("C:\\Users\\Zaf\\Desktop\\Pokemon\\Ekran Görüntüsü.jpg");
belge.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);
foreach (MODI.Image resim in belge.Images)
{
MODI.Layout plan = resim.Layout;
richTextBox1.Text = plan.Text;
}
belge.Close();
}
catch (Exception hata)
{
MessageBox.Show(hata.Message.ToString(), "Hata..!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
bool ok = false;
for (int i = 10; i <= 20; i++)
{
if (richTextBox1.Text.IndexOf(i + "") > 0)
{
ok = true;
MessageBox.Show("EFSANE POKEMON BULUNDU");
imageprocess.Stop();
sagsol.Stop();
break;
}
}
if (ok == false)
{
izin = 1;
}*/
}
private void button5_Click(object sender, EventArgs e)
{
Directory.CreateDirectory("C:\\Users\\Zaf\\Desktop\\Pokemon");
Screenshot().Save("C:\\Users\\Zaf\\Desktop\\Pokemon\\asd.jpg");
pictureBox1.Image = Screenshot();
pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
try
{
MODI.Document belge = new MODI.Document();
belge.Create("C:\\Users\\Zaf\\Desktop\\Pokemon\\asd.jpg");
belge.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);
foreach (MODI.Image resim in belge.Images)
{
MODI.Layout plan = resim.Layout;
richTextBox1.Text = plan.Text;
}
belge.Close();
}
catch (Exception hata)
{
MessageBox.Show(hata.Message.ToString(), "Hata..!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
bool ok = false;
for (int i = 10; i <= 20; i++)
{
if (richTextBox1.Text.IndexOf(i + "") > 0)
{
ok = true;
MessageBox.Show("EFSANE POKEMON BULUNDU");
imageprocess.Stop();
sagsol.Stop();
break;
}
}
if (ok == false)
{
izin = 1;
}
}
}
}