نمایش نتایج 1 تا 11 از 11

نام تاپیک: خواندن متن از روی عکس Optical character recognition

  1. #1

    Question خواندن متن از روی عکس Optical character recognition

    سلام خدمت همه اساتید،

    1-توی این تایپیک لطفا بصورت ساده و ابتدایی روش بدست آوردن یک کاراکتر مثلا 'A' رو بصورت مرحله ایی و الگوریتمیک بیان کنید و یک مثال ساده هم در صورت امکان بزنید.

    2-حالا مثلا الگوریتم کاراکتر 'A' رو تونست بررسی کنه و تشخیص بده برای کلمه ای مثل "َApple" چطور باید عمل کنه؟

    3-چالش های پیش رو چی هستن؟ مثلا اگه پس زمینه غیر سفید یا یک رنگ نباشه و فونت های گوناگون چی؟

    لطفا یک مثال توی سی شارپ زده بشه ممنون...
    آخرین ویرایش به وسیله daniyaltjm : جمعه 03 مرداد 1399 در 14:22 عصر

  2. #2

    نقل قول: خواندن متن از روی عکس Optical character recognition

    دوست عزیز بنظرم شما باید درباره کپچا تحقیق کنید

  3. #3

    نقل قول: خواندن متن از روی عکس Optical character recognition

    نقل قول نوشته شده توسط mahdavi1385 مشاهده تاپیک
    دوست عزیز بنظرم شما باید درباره کپچا تحقیق کنید
    کپچا فقط یه عکس هست و ارتباطی به استخراج حروف و اعداد از درون یک تصویر نداره !! کپچا رو برای امنیت سایت ها قرار میدن که فقط انسان بتونه تصویر رو بفهمه و وارد تکست باکس کنه ولی اینجا من دارم از استخراج یک سری الگو مثل یک عدد یا حرف توی یک آرایه دوبعدی از پیکسل حرف میزنم ! لطفا یک بار دیگه صورت مسئله رو مطالعه کنید.

  4. #4
    مدیر بخش آواتار danialafshari
    تاریخ عضویت
    تیر 1387
    محل زندگی
    هر کجا هستم باشم آسمان مال من است
    پست
    2,909

    نقل قول: خواندن متن از روی عکس Optical character recognition

    با سلام
    برای اینکار میتونید از کتابخانه های آماده استفاده کنید
    که معروفترین کتابخانه دات نت هم اگر اشتباه نکنم Tesseract هست که بوسیله charlesw نوشته شده و اگه اشتباه نکنم با دات نت کور هست
    میتونید از این لینک Sample ش رو دانلود کنید
    https://github.com/charlesw/tesseract-samples
    موفق باشید
    لطفاً از پرسیدن سوال در خصوصی خودداری کنید.
    قبل از ایجاد تاپیک، حتماً قوانین سایت را مطالعه فرمایید.
    قوانین پرسش های دانشجویی
    برای درست وارد شدن کد در قالب C#‎‎‎ سایت، ابتدا کد رو درون Notepad.exe کپی سپس از اونجا به سایت در قالب C#‎‎‎ منتفل کنید
    نرم افزار code manager دستیار برنامه نویسان جهت نگهداری کد ها

  5. #5

    نقل قول: خواندن متن از روی عکس Optical character recognition

    نقل قول نوشته شده توسط danialafshari مشاهده تاپیک
    با سلام
    برای اینکار میتونید از کتابخانه های آماده استفاده کنید
    که معروفترین کتابخانه دات نت هم اگر اشتباه نکنم Tesseract هست که بوسیله charlesw نوشته شده و اگه اشتباه نکنم با دات نت کور هست
    میتونید از این لینک Sample ش رو دانلود کنید
    https://github.com/charlesw/tesseract-samples
    موفق باشید
    سلام
    لطفا یک بار دیگه سوال رو بخونید من روش کار رو میخوام نه کتابخانه یا پلاگین یا چیز دیگه!!..

    1-توی این تایپیک لطفا بصورت ساده و ابتدایی روش بدست آوردن یک کاراکتر مثلا 'A' رو بصورت مرحله ایی و الگوریتمیک بیان کنید و یک مثال ساده هم در صورت امکان بزنید.

  6. #6

    نقل قول: خواندن متن از روی عکس Optical character recognition

    نقل قول نوشته شده توسط daniyaltjm مشاهده تاپیک
    سلام
    لطفا یک بار دیگه سوال رو بخونید من روش کار رو میخوام نه کتابخانه یا پلاگین یا چیز دیگه!!..

    1-توی این تایپیک لطفا بصورت ساده و ابتدایی روش بدست آوردن یک کاراکتر مثلا 'A' رو بصورت مرحله ایی و الگوریتمیک بیان کنید و یک مثال ساده هم در صورت امکان بزنید.
    اقا شما برو سمت یادگیری ماشین، به چندین روش میتونی اینکارو انجام بدی، 1. طبقه بندی 2. شبکه های عصبی
    بصورت خلاصه بخوام برات بگم عملکردش به این شکله که شما اول میای مثلا شبکه عصبیت رو که نوشتی باید آموزشش بدی، برای اینکار برای هر حرف چندتا تصویر در حالت های مختلف بهش میدی و میگی این چندتا تصویر همگی مربوط به حرف A هستن و به همین صورت برای تمامی حروف، بعد از اینکه بهش آموزش دادی، حالا خودش میتونه کاراکترها و حروف رو از توی تصاویر بخونه حتی اگه دست نویس باشن

  7. #7

    نقل قول: خواندن متن از روی عکس Optical character recognition

    نقل قول نوشته شده توسط mr.sirwan مشاهده تاپیک
    اقا شما برو سمت یادگیری ماشین، به چندین روش میتونی اینکارو انجام بدی، 1. طبقه بندی 2. شبکه های عصبی
    بصورت خلاصه بخوام برات بگم عملکردش به این شکله که شما اول میای مثلا شبکه عصبیت رو که نوشتی باید آموزشش بدی، برای اینکار برای هر حرف چندتا تصویر در حالت های مختلف بهش میدی و میگی این چندتا تصویر همگی مربوط به حرف A هستن و به همین صورت برای تمامی حروف، بعد از اینکه بهش آموزش دادی، حالا خودش میتونه کاراکترها و حروف رو از توی تصاویر بخونه حتی اگه دست نویس باشن
    ممنون از پاسخت، در حرف آسونه و در عمل یکم دشوار... اگه بشه یک مثال ساده با کد برای همین کاراکتر 'A' بزنی دیگه بقیش کپی میشه برای بقیه حروف البته اینجا حروف انگلیسی رو میخوایم بررسی کنیم و فارسی دشوارتر هست ..... چون حروف چند حالت دارن که هیچی.. حالا مثلا ما یک تصویر داریم که حروف انگلیسی داخلشه مثلا همین 'A' یعنی مثلا 6 تا کاراکتر وجود داره... خب باید تک به تک از تصویر جدا بشن کراپ بشن که بشه با اون تصاویر نمونه بررسی کرد دیگه این چطوری باید توی سی شارپ انجام بشه.؟ این برای حالتی هست که تصویر یک بکراند داره و کاراکتر ها هم یک رنگ مثل فتوشاپ که راحت انتخاب می کنیم... حالا اگه بک گراند یک رنگ نباشه چطور باید جدا کرد ؟ مثلا باید تصویر رو سیاه سفید کرد؟ نگتیو کرد یا چی؟

  8. #8

    نقل قول: خواندن متن از روی عکس Optical character recognition

    نقل قول نوشته شده توسط daniyaltjm مشاهده تاپیک
    ممنون از پاسخت، در حرف آسونه و در عمل یکم دشوار... اگه بشه یک مثال ساده با کد برای همین کاراکتر 'A' بزنی دیگه بقیش کپی میشه برای بقیه حروف البته اینجا حروف انگلیسی رو میخوایم بررسی کنیم و فارسی دشوارتر هست ..... چون حروف چند حالت دارن که هیچی.. حالا مثلا ما یک تصویر داریم که حروف انگلیسی داخلشه مثلا همین 'A' یعنی مثلا 6 تا کاراکتر وجود داره... خب باید تک به تک از تصویر جدا بشن کراپ بشن که بشه با اون تصاویر نمونه بررسی کرد دیگه این چطوری باید توی سی شارپ انجام بشه.؟ این برای حالتی هست که تصویر یک بکراند داره و کاراکتر ها هم یک رنگ مثل فتوشاپ که راحت انتخاب می کنیم... حالا اگه بک گراند یک رنگ نباشه چطور باید جدا کرد ؟ مثلا باید تصویر رو سیاه سفید کرد؟ نگتیو کرد یا چی؟
    داداش بحث هوش مصنوعی، یادگیری ماشین و شبکه های عصبی مبحث بسیار پیچیده ایه و خودش یک دنیای کامله و در یک مثال نمیگنجه، شما گفتی راهنمایی کنید، من راهو نشونت دادم که خودت بری دنبالش، تو این تاپیک و حتی فروم نمیگنجه که برای شبکه عصبی برات مثال بزنم، توی اینترنت جستجو کن که بفهمی اصلا قضیه چیه

  9. #9

    نقل قول: خواندن متن از روی عکس Optical character recognition

    نقل قول نوشته شده توسط mr.sirwan مشاهده تاپیک
    داداش بحث هوش مصنوعی، یادگیری ماشین و شبکه های عصبی مبحث بسیار پیچیده ایه و خودش یک دنیای کامله و در یک مثال نمیگنجه، شما گفتی راهنمایی کنید، من راهو نشونت دادم که خودت بری دنبالش، تو این تاپیک و حتی فروم نمیگنجه که برای شبکه عصبی برات مثال بزنم، توی اینترنت جستجو کن که بفهمی اصلا قضیه چیه
    ببخشید مگه می خوایم Red Dead Redemption 2 رو بسازیم!! یه استخراج حروف و کلمه هست دیگه تازه اونم انگلیسی نه فارسی!

    خب بگذریم ... لطفا دوستانی که توی پردازش تصویر تخصص دارن پست بذارن ...

    یه تصویر ساده داریم که بکگراند سفید هست و حروف سیاه (خیلی ساده) الان چطوری باید این حروف رو استخراج کرد ؟ الان من دورشون رو دستی با Paint قرمز کردم و میخوایم انتخابشون کنیم چطور به کامپیوتر بفهمونیم؟
    یکی از راه ها که بفکرم رسیده اینه که دوتا حلقه for تو در تو بذاریم و تمام نقاط سیاه رو انتخاب کنیم و اندیس اون پیکسلها رو توی یک bitmap دیگه ذخیره کنیم ... ولی حالا چطور دورشون رو انتخاب کنیم؟ چون اگه انتخاب نشن، نمیشه کاراکتر ها رو از هم تشخیص داد و اندیس ها قاطی میشه مثلا اون اولی رو انتخاب کنه و با حلقه تمام پیکسل های سیاه رو تشخیص بده و توی یک bitmap ذخیره کنه بعد بره اون کاراکتر بعدی و تا آخر سفید ها رو هم که نادیده بگیره ... الان مشکل اینه که چطور دورشون رو انتخاب بکنیم؟

    Penguins.jpg

  10. #10
    کاربر دائمی آواتار _behnam_
    تاریخ عضویت
    مهر 1389
    محل زندگی
    سونای ایران ( بوشهر )
    پست
    971

    نقل قول: خواندن متن از روی عکس Optical character recognition

    سلام. همونجور که دوستان گفتن برای اینکار نیاز هست که هوش مصنوعی بسازید. یا باید از الگوریتم هاب اماده استفاده کنید یا اینکه الگوریتم طراحی کنید که کار ساده ای نیست. توی مطالب زبان انگلیسی نمونه زیاد هست . برای نمونه اخر هم که فرمودید. شما برای جداسازی کاراکترها سیاه ، باید یه ماتریس دوبعدی درنظر بگیرید، حداکثر و حداقل x و y دور تصاویر رو بدست بیارید. ناخداگاه میبینید که حروف توی یک مربع قرار گرفتن چ‌بعد میتونید مربع مورد نظر رو از تصویر کراپ کنید.

    این هم یک منبع زبان انگلیسی


    https://www.codeproject.com/Articles...er-Recognition

  11. #11

    نقل قول: خواندن متن از روی عکس Optical character recognition

    بنظرتون با الگوریتم Sobel که برای لبه یابی هست میشه کاراکتر هارو جدا کرد؟ با سوبل قشنگ دور هر چیزی رو با رنگ سفید متمایز میکنه حالا چطور جدا شون کنیم به طوری که ترتیبشون توی کلمات حفظ بشه؟
    اینم کد سوبل:
    اینم منبع و برنامه به زبان سی شارپ:
    http://behsanandish.com/learning/ips...matlab-c-vbcc/


    کد الگوریتم سوبل( Sobel ) در #C:


    using System;using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.IO;
    using System.Drawing.Imaging;
    using System.Runtime.InteropServices;


    namespace SobelOperator
    {
    public partial class Sobel : Form
    {


    OpenFileDialog ofd;
    SaveFileDialog sfd;
    Bitmap bmp;


    public Sobel()
    {
    InitializeComponent();
    ofd = new OpenFileDialog();
    sfd = new SaveFileDialog();
    }

    private Bitmap cbmp
    {
    get
    {
    if (bmp == null)
    {
    bmp = new Bitmap(1, 1);
    }
    return bmp;
    }
    set
    {
    bmp = value;
    }
    }


    private void save(string filepath)
    {
    if (System.IO.File.Exists(filepath))
    {
    System.IO.File.Delete(filepath);
    }
    bmp.Save(filepath);
    }


    //Sobel operator kernel for horizontal pixel changes
    private static double[,] xSobel
    {
    get
    {
    return new double[,]
    {
    { -1, 0, 1 },
    { -2, 0, 2 },
    { -1, 0, 1 }
    };
    }
    }


    //Sobel operator kernel for vertical pixel changes
    private static double[,] ySobel
    {
    get
    {
    return new double[,]
    {
    { 1, 2, 1 },
    { 0, 0, 0 },
    { -1, -2, -1 }
    };
    }
    }


    private static Bitmap ConvolutionFilter(Bitmap sourceImage, double[,] xkernel, double[,] ykernel, double factor = 1, int bias = 0, bool grayscale = false)
    {


    //Image dimensions stored in variables for convenience
    int width = sourceImage.Width;
    int height = sourceImage.Height;


    //Lock source image bits into system memory
    BitmapData srcData = sourceImage.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);


    //Get the total number of bytes in your image - 32 bytes per pixel x image width x image height -> for 32bpp images
    int bytes = srcData.Stride * srcData.Height;


    //Create byte arrays to hold pixel information of your image
    byte[] pixelBuffer = new byte[bytes];
    byte[] resultBuffer = new byte[bytes];


    //Get the address of the first pixel data
    IntPtr srcScan0 = srcData.Scan0;


    //Copy image data to one of the byte arrays
    Marshal.Copy(srcScan0, pixelBuffer, 0, bytes);


    //Unlock bits from system memory -> we have all our needed info in the array
    sourceImage.UnlockBits(srcData);


    //Convert your image to grayscale if necessary
    if (grayscale == true)
    {
    float rgb = 0;
    for (int i = 0; i < pixelBuffer.Length; i += 4)
    {
    rgb = pixelBuffer[i] * .21f;
    rgb += pixelBuffer[i + 1] * .71f;
    rgb += pixelBuffer[i + 2] * .071f;
    pixelBuffer[i] = (byte)rgb;
    pixelBuffer[i + 1] = pixelBuffer[i];
    pixelBuffer[i + 2] = pixelBuffer[i];
    pixelBuffer[i + 3] = 255;
    }
    }


    //Create variable for pixel data for each kernel
    double xr = 0.0;
    double xg = 0.0;
    double xb = 0.0;
    double yr = 0.0;
    double yg = 0.0;
    double yb = 0.0;
    double rt = 0.0;
    double gt = 0.0;
    double bt = 0.0;


    //This is how much your center pixel is offset from the border of your kernel
    //Sobel is 3x3, so center is 1 pixel from the kernel border
    int filterOffset = 1;
    int calcOffset = 0;
    int byteOffset = 0;


    //Start with the pixel that is offset 1 from top and 1 from the left side
    //this is so entire kernel is on your image
    for (int OffsetY = filterOffset; OffsetY < height - filterOffset; OffsetY++)
    {
    for (int OffsetX = filterOffset; OffsetX < width - filterOffset; OffsetX++)
    {
    //reset rgb values to 0
    xr = xg = xb = yr = yg = yb = 0;
    rt = gt = bt = 0.0;


    //position of the kernel center pixel
    byteOffset = OffsetY * srcData.Stride + OffsetX * 4;


    //kernel calculations
    for (int filterY = -filterOffset; filterY <= filterOffset; filterY++)
    {
    for (int filterX = -filterOffset; filterX <= filterOffset; filterX++)
    {
    calcOffset = byteOffset + filterX * 4 + filterY * srcData.Stride;
    xb += (double)(pixelBuffer[calcOffset]) * xkernel[filterY + filterOffset, filterX + filterOffset];
    xg += (double)(pixelBuffer[calcOffset + 1]) * xkernel[filterY + filterOffset, filterX + filterOffset];
    xr += (double)(pixelBuffer[calcOffset + 2]) * xkernel[filterY + filterOffset, filterX + filterOffset];
    yb += (double)(pixelBuffer[calcOffset]) * ykernel[filterY + filterOffset, filterX + filterOffset];
    yg += (double)(pixelBuffer[calcOffset + 1]) * ykernel[filterY + filterOffset, filterX + filterOffset];
    yr += (double)(pixelBuffer[calcOffset + 2]) * ykernel[filterY + filterOffset, filterX + filterOffset];
    }
    }


    //total rgb values for this pixel
    bt = Math.Sqrt((xb * xb) + (yb * yb));
    gt = Math.Sqrt((xg * xg) + (yg * yg));
    rt = Math.Sqrt((xr * xr) + (yr * yr));


    //set limits, bytes can hold values from 0 up to 255;
    if (bt > 255) bt = 255;
    else if (bt < 0) bt = 0;
    if (gt > 255) gt = 255;
    else if (gt < 0) gt = 0;
    if (rt > 255) rt = 255;
    else if (rt < 0) rt = 0;


    //set new data in the other byte array for your image data
    resultBuffer[byteOffset] = (byte)(bt);
    resultBuffer[byteOffset + 1] = (byte)(gt);
    resultBuffer[byteOffset + 2] = (byte)(rt);
    resultBuffer[byteOffset + 3] = 255;
    }
    }


    //Create new bitmap which will hold the processed data
    Bitmap resultImage = new Bitmap(width, height);


    //Lock bits into system memory
    BitmapData resultData = resultImage.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);


    //Copy from byte array that holds processed data to bitmap
    Marshal.Copy(resultBuffer, 0, resultData.Scan0, resultBuffer.Length);


    //Unlock bits from system memory
    resultImage.UnlockBits(resultData);


    //Return processed image
    return resultImage;
    }


    private void btnLoad_Click(object sender, EventArgs e)
    {
    if (ofd.ShowDialog() == DialogResult.OK)
    {
    bmp = (Bitmap)Bitmap.FromFile(ofd.FileName);
    AutoScroll = true;
    AutoScrollMinSize = new Size(Convert.ToInt32(bmp.Width), Convert.ToInt32(bmp.Height));
    Invalidate();
    }
    }


    private void btnSave_Click(object sender, EventArgs e)
    {
    if (sfd.ShowDialog() == DialogResult.OK)
    {
    save(sfd.FileName);
    }
    }


    private void btnSobel_Click(object sender, EventArgs e)
    {
    bmp = ConvolutionFilter(bmp, xSobel, ySobel, 1.0, 0, true);
    Invalidate();
    }


    private void Display(object sender, PaintEventArgs e)
    {
    e.Graphics.DrawImage(cbmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
    }
    }
    }




    همه این کد در اینجا موجود است (پروژه با ویژوال استودیو ۲۰۱۵ ایجاد شد):
    SobelOperatorInC#‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎
    رمز فایل : behsanandish.com
    آخرین ویرایش به وسیله daniyaltjm : چهارشنبه 22 مرداد 1399 در 16:04 عصر

تاپیک های مشابه

  1. آموزش: فیلم آموزشی با عنوان Optical Character Recognition (OCR) in Emgu CV
    نوشته شده توسط pnet در بخش VB.NET
    پاسخ: 2
    آخرین پست: یک شنبه 22 دی 1392, 12:38 عصر
  2. Use Multi-Byte Character Set یا Use Unicode Character Set
    نوشته شده توسط vasilopita در بخش برنامه نویسی با MFC و ++Visual C
    پاسخ: 1
    آخرین پست: چهارشنبه 19 بهمن 1390, 20:07 عصر
  3. character in vb.net
    نوشته شده توسط xxnagin در بخش VB.NET
    پاسخ: 2
    آخرین پست: شنبه 22 فروردین 1388, 21:47 عصر
  4. سوال: character
    نوشته شده توسط mehrnoush در بخش برنامه نویسی در 6 VB
    پاسخ: 1
    آخرین پست: یک شنبه 27 بهمن 1387, 04:53 صبح
  5. character set
    نوشته شده توسط حمیدرضاصادقیان در بخش SQL Server
    پاسخ: 2
    آخرین پست: چهارشنبه 09 اسفند 1385, 16:10 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •