LỜI NÓI ĐẦUTrong cuộc sống hiện đại ngày nay chúng ta đang dần thấy các mô hình AI đang giúp đỡ con người rất nhiều trong cuộc sống, có thể kể đến như robot, trợ lý ảo, …Nhận thấy sự tiế
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ-VIỄN THÔNG
BÁO CÁO BÀI THI GIỮA KỲ
Lập Trình Nâng Cao
Đề Bài:
Thiết Kế Hệ Thống Nhận Dạng Văn Bản Từ Hình Ảnh
***
Sinh viên thực hiện:
Giảng viên hướng dẫn: TS.Nguyễn Quang Minh
Hà Nội, tháng 6/202
Trang 2LỜI NÓI ĐẦU
Trong cuộc sống hiện đại ngày nay chúng ta đang dần thấy các mô hình AI đang giúp đỡ con người rất nhiều trong cuộc sống, có thể kể đến như robot, trợ lý ảo, … Nhận thấy sự tiến bộ của khoa học và các kỹ thuật tiên tiến đang được áp dụng trong cuộc sống hiện nay, em có ấp ủ một ước mơ nghiên cứu khoa học và trong bài này em sẽ trình bày một phần nhỏ của ứng dụng AI Kỹ thuật này đã được các nhà khoa học trên thế giới ứng dụng vào mô hình AI để dễ dàng detect ra một đoạn từ một hình ảnh Trong quá trình làm dưới sự hướng dẫn của TS Nguyễn Quang Minh đã giúp em rất nhiều trong bài này em xin chân thành cảm ơn Thầy
Trang 3M C L C Ụ Ụ
LỜI NÓI ĐẦU 2
CHƯƠNG I 3
I.I- SETUP 3
I.I.I – TẢI TÀI NGUYÊN 3
I.I.II – SETUP MÔI TRƯỜNG 3
I.I.III – THUẬT TOÁN 9
CHƯƠNG II 10
I- GIẢI THÍCH CODE 10
I.I – IMPORT THƯ VIỆN 10
I.II– CLASS TEST 10
I.III – MAIN 11
CHƯƠNG III 13
I- KẾT LUẬN 13
II- HƯỚNG PHÁT TRIỂN 13
CHƯƠNG I I.I- SETUP I.I.I – TẢI TÀI NGUYÊN 1- T i ECLIPSE IDE và JDK ả Trước hết ta cần tải 1 edittor để code và cái em lựa chọn là ECLIPSE IDE, nó đang được sử dụng rất rộng rãi bởi các lập trình viên java nói riêng và ngôn ngữ lập trình nói chung Bởi ứng dụng mà nó mang lại rất lớn cho người lập trình Chúng ta đi đến: Eclipse Packages | The Eclipse Foundation - home to a global community, the Eclipse IDE, Jakarta EE and over 350 open source projects
Và tải về bản ECLIPSE IDE thích hợp cho máy của mình, và chưa hết để có thể lập trình java được trên máy tính của mình thì chúng ta cần tải môi trường JDK ở trang: Java Downloads | Oracle
2- T i th vi n x lý nh OPENCV ả ư ệ ử ả
Chúng ta cần tải thư viện OPENCV để có thể xử lý các kỹ thuật liên quan đến xử
lý ảnh ở trang: Releases - OpenCV
Trang 4I.I.II – SETUP MÔI TRƯỜNG
1- Thêm OPENCV vào ECLIPSE IDE
Đầu tiên chúng ta mở ECLIPSE IDE trong lab windown>preferences
Tiếp theo chọn Java > Build Path > User Libraries
Chọn New và điền tên thư viện (tên bất kỳ) chọn ok, trỏ vào thư viện vừa tạo chọn Add External JARs và chọn đến OpenCV vừa tải về (file.jar)
Trang 5
Tiếp theo chúng ta chọn Native library location và chọn Edit và trỏ đến (
vd :C:\opencv\build\java\x64)
Cuối cùng apply và chúng ta đã xong bước đẻ thểm OPENCV vào ECLIPSE IDE
2-Thêm OPENCV vào Project
Đầu tiên chúng ta tạo project java trên ECLIPSE IDE và tạo 1 class
Trang 6
Chuột phải vào project > build path > Add libraries…
Chọn User lib >next
Trang 7
Và cuối cùng chọn thư viện OPENCV mình vừa thêm vào ECLIPSE IDE.
3-Setup các thành phầần liên quan đêến project
Đầu tiên chúng ta phải tải Tesseract-OCR ở: Releases · nguyenq/tess4j (github.com) tùy chọn phiên bản phù hợp rồi tải về giải nén
Tiếp theo chung ta import thư viện Tesseract ở đây, em dùng maven
Chuột phải vào project chọn Configure> Convert to Maven Project
Tiếp theo tìm kiếm đoạn code và chèn vào trong file pom.xml
Tìm kiếm từ khóa “maven tess4j” ví dụ ở bản Tess4j bản 4.4.0 ở trang: Maven Repository: net.sourceforge.tess4j » tess4j » 4.4.0 (mvnrepository.com)
Copy đoạn code
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
Trang 8<artifactId>tess4j</artifactId> <version>4.4.0</version>
</dependency>
Dán vào file pom.xml và lưu lại
Trang 9I.I.III – THUẬT TOÁN
1-Mô hình h thôếng ệ
2-Pseudo-code
Trang 10CHƯƠNG II
I- GIẢI THÍCH CODE
I.I – IMPORT THƯ VIỆN
/*
* import thư viện OPENCV
*/
import static org.opencv.imgproc.Imgproc.cvtColor;
import static org.opencv.imgproc.Imgproc.COLOR_BGR2GRAY;
import static org.opencv.imgcodecs.Imgcodecs.imread;
import static org.opencv.imgcodecs.Imgcodecs.imwrite;
import org.opencv.core.Core;
import org.opencv.core.Mat;
/*
* import thư viện file
*/
import java.io.File;
import java.io.FileWriter;
/*
* import thư viện Tesseract
*/
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
I.II– CLASS TEST
public class test {
static String SRC_PATH = "D:\\code\\" ; // Khai báo biến đường dẫn đến thư mục chứa ảnh input
static Tesseract tesseract = new Tesseract();
static {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
/*
* đường dẫn đến thư mục chứa data để train cho mô hình
*/
tesseract.setDatapath( "C:\\Users\\Admin\\Downloads\\tessdata-4.1.0\\tessdata-4.1.0\\" );
}
String extractString(Mat inputMat ) {
String result = " " ;
Mat gray = new Mat();
/*
* chuyển đổi không gian màu R G B sang ảnh xám (ảnh gray scale) */
cvtColor(inputMat gray , ,COLOR_BGR2GRAY);
imwrite(SRC_PATH+ "gray.png" , gray ); // ghi ảnh gray.png vào thư mục chứa ảnh input
try { // thực thi trong try
/*
* quá trình detect văn bản và lưu vào biến result
* dùng thư viện tesseract và hàm doOCR
* Optical Character Recognition (OCR): nhận dạng ký tự quang học
Trang 11}catch (TesseractException e ) { // lỗi thực thi trong catch
e printStackTrace();
}
returnresult ;
}
I.III – MAIN
public static void main(String[] args ) {
long start = System.currentTimeMillis();// khởi tạo biến start để lấy tgian hiện tại theo dạng mili giây
Mat origin = imread (SRC_PATH+ "TheSV.jpg" ); // khởi tạo biến để đọc ảnh input
String result = new test().extractString( origin ); //cho ảnh vào hàm train data để detect
/*
* sủ dụng FileWriter để ghi file
*/
try { // thực thi trong try
FileWriter fw = new FileWriter( "D:\\code\\ThongTinSV.txt" );
fw write( result );
fw close();
} catch (Exception ) { e //lỗi thì chạy vào trong catch
System.out.println( ); e
}
System.out.println( "time" ); // in ra cửa sổ Console chuỗi " time "
System.out.println(System.currentTimeMillis()- start ); //in ra màn hình tổng thời gian thực hiện mô hình
System.out.println( "done" ); // in ra cửa sổ Console chuối "done"
System.out.println( "Success " ); //in ra cửa sổ Console chuối "Success"
}
}
Trang 12I.IV – KẾT QUẢ
Thời gian thực hiện chương trình mất 2.8 giây khá là nhanh
ảnh Sinh Viên (input) output
Output File.txt
Trang 13CHƯƠNG III
I- KẾT LUẬN
Sau khi hoàn thành bài thi giữa kì em đã học được rất nhiều kiến thức liên quan đến lập trình java, xử lý ảnh…tuy kết quả chưa được như kỳ vọng nhưng phần nào cũng đáp ứng được yêu cầu của bài toán Em cảm ơn Thầy đã giúp đỡ em rất nhiều trong quá trình thực hiện bài Giữa Kỳ em xin chân thành cảm ơn
II- HƯỚNG PHÁT TRIỂN
Mặc dù kết quả chưa được như mong muốn, nhưng cũng phần nào giúp em hiểu được vấn đề, trong tương lai em sẽ xây dựng thêm để cho project thực tế hơn và ứng dụng được vào đời sống hằng ngày