- [DEVEXPRESS] Hướng dẫn bật tính năng Scroll Pixcel in Touch trên GridView
- [DEVEXPRESS] Hướng dẫn sử dụng TileBar viết ứng dụng duyệt hình ảnh Winform
- [DEVEXPRESS] Tô màu border TextEdit trên Winform
- [C#] Lấy dữ liệu từ Console Write hiển thị lên textbox Winform
- [C#] Hiển thị Progress bar trên Window Console
- [C#] Di chuyển control Runtime và lưu layout trên winform
- [SQLSERVER] Sử dụng hàm NULL IF
- [C#] Chia sẽ source code mã đi tuần bằng giao diện Winform
- [C#] Flash Window in Taskbar Winform
- Download và Giải nén tập tin File sử dụng Powershell
- [C#] Hướng dẫn cách lấy thông tin đăng nhập tài khoản và mật khẩu web browser trên windows
- [VB.NET] CRUD Thêm xóa sửa tìm kiếm Realtime FireBase
- [C#] Hiển thị thông báo Toast Message trong lập trình Winform
- [C#] Cấu hình định dạng ngày tháng, thời gian trên Windows cho ứng dụng Winform
- [C#] Rút gọn đường dẫn link url với TinyURL API
- [C#] Hướng dẫn cách bo tròn winform with Radius
- [C#] Chia sẽ class BackGroundOverlay Show Modal cho Winform
- [C#] Hướng dẫn Flip Image Winform
- [C#] Invoke là gì? cách sử dụng phương thức Invoke()
- [C#] Hướng dẫn chia sẽ file, folder từ ứng dụng sang Zalo Chat
[C#] Hướng dẫn tách chữ tiếng việt ra khỏi hình ảnh (TESSERACT OCR )
Xin chào các bạn, bài viết hôm nay mình sẽ tiếp tục hướng dẫn các bạn cách tách chữ từ hình ảnh trong lập trình c# sử dụng thư viện TESSERACT OCR.
[C#] Tách chữ tiếng việt ra khỏi hình ảnh lập trình csharp
OCR viết tắt của từ Optical Character Recognition tạm dịch là nhận dạng kí tự quang học, nói dễ hiểu thì đây là kỹ thuật giúp nhận dạng các ký tự trên một bức ảnh.
Ứng dụng OCR:
Chắc hẳn các bạn đã một lần sử dụng đến công nghệ nhưng không để ý, vì chúng ta chỉ sử dụng nó một cách gián tiếp đó là máy Scanner. OCR được ứng dụng như một phần mềm được tích hợp trên máy tính hoặc trực tiếp vào một phần cứng nào đó.
Hạn chế của OCR:
Bên cạnh đó thì OCR cũng còn khá nhiều những hạn chế như:
- Hầu hết các phần mềm sử dụng OCR chỉ nhận dạng được khoảng 80 - 90% trên hình ảnh rõ nét.
- Đối với những hình ảnh có màu nền mà màu chữ không có nhiều chênh lệch, hay các hình chụp chữ viết tay thì kết quả nhận dạng không khả quan cho lắm
- Đến thời điểm hiện tại thì OCR chưa support tất cả các ngôn ngữ.
Dưới đây là giao diện demo của ứng dụng Tách chữ ra khỏi hình ảnh C#:
Đầu tiên, các bạn cần cài đặt thư viện Tesseract từ Nuget và project của mình, như hình ảnh dưới đây.
Sau khi cài đặt xong thư viện, các bạn vào trang web sau để tải thư viện Tesseract cho ngôn ngữ của mình cần thực hiện.
Ví dụ: trong bài viết này mình ocr ngôn ngữ việt nam, nên mình sẽ download bản vie.traineddata
về project của mình.
https://github.com/tesseract-ocr/tesseract/wiki/Data-Files
Sau khi tải file vie.traineddata
về xong, các bạn tạo cho mình thư mục với tên tessdata và copy file vào trong thư mục này.
Sau đó, mình sẽ paste vào thư mục gốc của project và set thuộc tính là copy always khi chạy ứng dụng, như hình bên dưới.
và tiếp đến là set copy always.
Video demo ứng dụng OCR (tách chữ ra khỏi hình ảnh lập trình C#)
Full source code tách chữ ra khỏi hình ảnh OCR TESSERACT 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;
using System.Threading.Tasks;
using System.Windows.Forms;
using Tesseract;
namespace OCR_Vietnamese
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
pictureBox1.LoadAsync(openFileDialog.FileName);
} }
private string OCR(Bitmap b)
{
string res = "";
using (var engine = new TesseractEngine(@"tessdata", "vie", EngineMode.Default))
{
using (var page = engine.Process(b, PageSegMode.AutoOnly))
res = page.GetText();
}
return res;
}
private void button2_Click(object sender, EventArgs e)
{
string result = "";
Task.Factory.StartNew(() => {
picloading.BeginInvoke(new Action(() =>
{ picloading.Visible = true;
}));
result = OCR((Bitmap)pictureBox1.Image);
richTextBox1.BeginInvoke(new Action(() => {
richTextBox1.Text = result;
}));
picloading.BeginInvoke(new Action(() =>
{
picloading.Visible = false;
}));
});
}
}
}
Thanks for watching!