Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 104 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
104
Dung lượng
5,41 MB
Nội dung
ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA TRƯƠNG THANH TÙNG KIỂMTRALỖIINTRÊNREARCASESỬDỤNGMẠNG NƠRON NHÂNTẠO LUẬN VĂN THẠC SĨ KỸ THUẬT KỸ THUẬT ĐIỀU KHIỂN VÀ TỰ ĐỘNG HÓA Đà Nẵng – Năm 2017 ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA TRƯƠNG THANH TÙNG KIỂMTRALỖIINTRÊNREARCASESỬDỤNGMẠNG NƠRON NHÂNTẠO Chuyên ngành: Kỹ thuật điều khiển tự động hóa Mã số: 60520216 LUẬN VĂN THẠC SĨ KỸ THUẬT Người hướng dẫn khoa học: TS.NGUYỄN VĂN MINH TRÍ Đà Nẵng – Năm 2017 i LỜI CAM ĐOAN Tôi xin cam đoan cơng trình nghiên cứu riêng tơi Các số liệu, kết nêu luận văn trung thực chưa công bố công trình khác Tác giả ký ghi rõ họ tên TRƯƠNG THANH TÙNG ii TÓM TẮT LUẬN VĂN KIỂMTRALỖIINTRÊNREARCASESỬDỤNGMẠNGNƠRONNHÂNTẠO Học viên: Trương Thanh Tùng Mã số: 60520216 Chuyên ngành: Kỹ thuật điều khiển tự động hóa Khóa: K33.TĐH(PFIEV) Trường Đại học Bách khoa – ĐHĐN Tóm tắt: Đề tài nghiên cứu thuật toán xử lý ảnh sau áp dụng vào việc nhận dạng ký tự inrearcasesửdụngmạngnơronnhân tạo, ứng dụng vào thực tế sản xuất tự động, đạt kết khả quan Tuy nhiên, với khoảng thời gian cho phép kiến thức có hạn, đề tài tránh khỏi vấn đề chưa giải đề xuất cải tiến tương lai, tiêu biểu việc tìm kiếm tập mẫu có kích thước lớn hoàn chỉnh để đáp ứng yêu cầu đề tài , số lượng tâp tin mẫu có kích thước nhỏ dẫn đến có sai lệch nhận dạng số ký tự có hình dạng giống (số với chữ D hay số với chữ B, …) Tác giả tóm tắt kết đạt đưa hướng phát triển Từ khóa: Chương trình kiểmtra lỗi, mạngnơronnhân tạo, máy in laser, nhận dạng ký tự, chương trình mơ USING NEURAL NETWORK TO CHECK ERROR ON REARCASE OF LASER PRINTER Abstract- Research on the algorithm in image processing then applied to the printed character recognition on rearcase by neural networks, the application in practice of production automation, achieved satisfactory results However, with time allowed and limited knowledge, the subject cannot be avoided these issues unresolved and it is also the proposed improvements in the future, most is finding a set of sample size and complete to meet the requirements of the subject the number of sample files are small in size has led to the false identity of a number of characters have the same shape (the number with the letter D or no with letter B, ) The author has summarized the results achieved and launched the next development direction Keywords- The error checking program , Neural Network, laser printer, character recognition, program debug iii MỤC LỤC LỜI CAM ĐOAN i TÓM TẮT LUẬN VĂN ii MỤC LỤC iii DANH MỤC CHỮ VIẾT TẮT v DANH MỤC CÁC BẢNG vi DANH MỤC CÁC HÌNH VẼ vii MỞ ĐẦU CHƯƠNG I: TỔNG QUAN ĐỀ TÀI “KIỂM TRALỖIINTRÊNREARCASESỬDỤNGMẠNG NORON NHÂN TẠO” 1.1 Giới thiệu đề tài nghiên cứu: 1.2 Mục tiêu nhiệm vụ đề tài: CHƯƠNG II: CƠ SỞ LÝ THUYẾT VỀ XỬ LÝ ẢNH 2.1 Xử lý ảnh, vấn đề xử lý ảnh 2.1.1 Xử lý ảnh ? 2.1.2 Các vấn đề xử lý ảnh : 2.1 Xử lý ảnh để nhận dạng ký tự: 10 2.2.1 Tổng quan xử lý ảnh để nhận dạng ký tự: 11 2.2.2 Các phương pháp nhận dạng ký tự xử lý ảnh: 13 CHƯƠNG III: NHẬN DẠNG KÝ TỰ 30 3.1 Mơ tả tốn: 30 3.2 Quá trình thực hiện: 31 3.2.1.Xử lý liệu (Phân tích ảnh): 32 3.2.2 Tách ký tự: 32 3.2.3 Ánh xạ ký tự ảnh vào ma trận giá trị: 35 iv 3.2.4 Tìm biên, đường bao: 36 3.2.5 Huấn luyện mạng: 37 CHƯƠNG IV: CHƯƠNG TRÌNH MƠ PHỎNG VÀ KẾT QUẢ 44 4.1 Lưu đồ thuật toán chương trình : 44 4.2 Môi trường thực nghiệm: 44 4.3 Tạo sở liệu mẫu: 45 4.4 Chương trình chính: 46 4.4.1 Đăng nhập: 46 4.4.2 Chọn camera kết nối: 46 4.4.3 Khoanh vùng: 47 4.4.4 Chạy chương trình: 48 4.4.5 Một số chức khác: 49 4.5 Chương trình phụ: 49 4.6 Hướng phát triển tiếp theo: 50 KẾT LUẬN VÀ KIẾN NGHỊ 51 DANH MỤC TÀI LIỆU THAM KHẢO 52 PHỤ LỤC 53 v DANH MỤC CHỮ VIẾT TẮT STT Ký hiệu Ý nghĩa OCR Optical Character Recognition VNdorc Việt Nam Document Optical Character Recognition BP Back Propagation Đ Đúng S Sai Ok Đạt NG Not Good H hidden vi DANH MỤC CÁC BẢNG Số hiệu bảng Tên bảng Trang 2.1 So sánh khả làm việc não máy tính 21 2.2 Các hàm truyền H(s) thường dùng 22 2.3 Một số hàm phi tuyến thường dùng mơ hình nơron 23 vii DANH MỤC CÁC HÌNH VẼ Số hiệu hình vẽ Tên hình vẽ Trang 1.1 Mơ hình thực 2.1 Quá trình xử lý ảnh 2.2 Các bước hệ thống xử lý ảnh 2.3 Ảnh thu nhận ảnh mong muốn 2.4 Ảnh thu qua lọc Mean 2.5 Ảnh sau qua lọc Median 2.6 Ảnh thu sau xử lý qua lọc Gauss 2.7 Mơ hình cấu trúc đối tượng nhà 12 2.8 Sơ đồ tổng quát hệ thống nhận dạng ảnh 13 2.9 Các từ vựng ngơn ngữ hình thức PLD 17 2.10 Các phép tốn ngôn ngữ LCD 18 2.11 Cấu trúc nơron sinh học 19 2.12 Mơ hình nơron nhântạo 21 2.13 Phân loại mạng nơron nhântạo 24 2.14 Cấu trúc mạng perceptron lớp 26 3.1 Sơ đồ trình thực 31 3.2 Xác định dòng 32 3.3 Xác định giới hạn 34 3.4 Ánh xạ lưới ký tự 36 3.5 Chuyển ma trận điểm sang ma trận giá trị 37 viii 3.6 Sơ đồ thuật toán huấn luyện mạng 38 3.7 Cấu trúc mạng Feed-forward lớp 150 nơron đầu vào 40 3.8 Đồ thị biến thiên Wij 43 3.9 Đồ thị biến thiên Wjk 43 4.1 Lưu đồ thuật tốn chương trình 44 4.2 Giao diện chương trình tạo sở liệu nhận dạng 45 4.3 Giao diện chương trình tạo file huấn luyện cho chương trình 46 4.4 Chọn camera kết nối 47 4.5 Khoanh vùng 47 4.6 Kết với mã hàng WH-108 48 4.7 Kết với mã hàng WH-109 48 4.8 Một số cài đặt khác 49 4.9 Chương trình phụ 49 try { if (captureFromCam) frame = _capture.QueryFrame(); frameCount++; processor.ProcessImage(frame); imageBox1.Image = frame; } catch (Exception ex) { Console.WriteLine(ex.Message); } } private void LoadTemplates(string fileName) { try { using (FileStream fs = new FileStream(fileName, FileMode.Open)) processor.templates = (Templates)new BinaryFormatter().Deserialize(fs); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void ApplySettings() { try { processor.minContourArea = 10; processor.minContourLength = 15; processor.finder.maxACFDescriptorDeviation = 4; processor.finder.minACF = 0.96; processor.finder.minICF = 0.85; processor.blur = true; processor.noiseFilter = true; processor.cannyThreshold = 50; processor.adaptiveThresholdBlockSize = 4; processor.adaptiveThresholdParameter = true ? 1.5 : 0.5; } } catch (Exception ex) { MessageBox.Show(ex.Message); } private void bttaianh_Click(object sender, EventArgs e) { captureFromCam = false; OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "Image|*.bmp;*.png;*.jpg;*.jpeg"; if (ofd.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) try { frame = new Image((Bitmap)Bitmap.FromFile(ofd.FileName)); imageBox1.Image = frame; Application.Idle += new EventHandler(Application_Idle); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void imageBox1_Paint(object sender, PaintEventArgs e) { if (frame == null) return; Font font = new Font(Font.FontFamily, 24);//16 Brush bgBrush = new SolidBrush(Color.FromArgb(255, 0, 0, 0)); Brush foreBrush = new SolidBrush(Color.FromArgb(255, 255, 255, 255)); Pen borderPen = new Pen(Color.FromArgb(150, 0, 255, 0)); Brush redBrush = new SolidBrush(Color.Red); lock (processor.foundTemplates) { foreach (FoundTemplateDesc found in processor.foundTemplates) { Rectangle foundRect = found.sample.contour.SourceBoundingRect; System.Drawing.Point p1 = new System.Drawing.Point((foundRect.Left + foundRect.Right) / 2, foundRect.Top); string text = found.template.name; e.Graphics.DrawRectangle(borderPen, foundRect); e.Graphics.DrawString(text, font, bgBrush, new PointF(p1.X + font.Height / 3, p1.Y + - font.Height)); e.Graphics.DrawString(text, font, redBrush, new PointF(p1.X font.Height / 3, p1.Y - font.Height)); } } } private void bttaomau_Click(object sender, EventArgs e) { if (frame != null) new Taomau(processor.templates, processor.samples, frame).ShowDialog(); } private void SaveTemplates(string fileName) { try { using (FileStream fs = new FileStream(fileName, FileMode.Create)) new BinaryFormatter().Serialize(fs, processor.templates); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btluumau_Click_1(object sender, EventArgs e) { SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "Templates(*.bin)|*.bin"; if (sfd.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) { templateFile = sfd.FileName; SaveTemplates(templateFile); } } private void btCamera_Click(object sender, EventArgs e) { captureFromCam = true; StartCapture(); } private void StartCapture() { try { _capture = new Capture(); } catch (NullReferenceException ex) { MessageBox.Show(ex.Message); } } private void btthoat_Click(object sender, EventArgs e) { Application.Exit(); } } CHƯƠNG TRÌNH CHÍNH using using using using using using using using using using using using using System; System.Collections.Generic; System.Drawing; System.Windows.Forms; Emgu.CV; Emgu.CV.Structure; ContourAnalysisNS; System.Runtime.Serialization.Formatters.Binary; System.IO; AForge.Video; AForge; AForge.Video.DirectShow; System.Drawing.Imaging; namespace WindowsFormsApplication1 { public partial class Giaodienchinh : Form { public Giaodienchinh() { InitializeComponent(); processor = new ImageProcessor(); templateFile = AppDomain.CurrentDomain.BaseDirectory + "\\ok.bin"; LoadTemplates(templateFile); n = 0; } private FilterInfoCollection CaptureDivice; private VideoCaptureDevice FinalFrame; Bitmap video1 = null, video2; bool OnOff = false; bool Dangchay = true; Graphics g1, g2, g3; int thoigiandemnguoc; int day = DateTime.Now.Day; int month = DateTime.Now.Month; int year = DateTime.Now.Year; int hour = DateTime.Now.Hour; int minute = DateTime.Now.Minute; int second = DateTime.Now.Second; int _select = 0; private Bitmap anhnhiphan; string mahang; string a = null; string b = "WH-108"; double hesohoc = 0.15; double alpha = 0.14; int inputnoron = 150; int outputnoron = 16; int hidenoron = 500; private bool _isBeginDraw, _vehinh; private int _x1; private int _x2; private int _y1; private int _y2; private int _dx, _dy Image frame; ImageProcessor processor; Dictionary AugmentedRealityImages = new Dictionary(); string templateFile; public void Getvalue(String user) { Tennguoidung.Text = user; } private void Dangnhapbutton_Click(object sender, EventArgs e) { Dangnhap frm_Dangnhap = new Dangnhap(); frm_Dangnhap.MyGetData = new Dangnhap.GetString(Getvalue); frm_Dangnhap.ShowDialog(); if (Tennguoidung.Text == "tung") { Ketnoibotton.Enabled = true; ketnoi.Enabled = true; Khoanhvungbutton.Enabled = true; khoanhvung.Enabled = true; batdaubutton.Enabled = true; Batdau.Enabled = true; Dunglaibutton.Enabled = true; Dunglailabel.Enabled = true; Tab.Enabled = true; } } bool Daketnoi = false; public void Getbool(bool ketnoi) { Daketnoi = ketnoi; } int Camera = 0; public void Getcamera(int camera) { Camera = camera; } private void Ketnoibotton_Click(object sender, EventArgs e) { Chonthietbiketnoi frm_Chonthietbiketnoi = new Chonthietbiketnoi(); frm_Chonthietbiketnoi.MyGetData = new Chonthietbiketnoi.Getbool(Getbool); frm_Chonthietbiketnoi.Getcamera = new Chonthietbiketnoi.Getint(Getcamera); frm_Chonthietbiketnoi.ShowDialog(); if (Daketnoi) { Thietbiketnoilabel.Text = CaptureDivice[Camera].Name; FinalFrame = new VideoCaptureDevice(CaptureDivice[Camera].MonikerString); FinalFrame.NewFrame += new NewFrameEventHandler(FinalFrame_NewFrame); FinalFrame.Start(); } } private void FinalFrame_NewFrame(object sender, NewFrameEventArgs eventArgs) { video1 = (Bitmap)eventArgs.Frame.Clone(); video2 = (Bitmap)eventArgs.Frame.Clone(); if (OnOff) { g1 = Graphics.FromImage(video1); g1.DrawString(day.ToString() + "/" + month.ToString() + "/" + year.ToString() + "\n" + thoigiandemnguoc.ToString(), new Font("Arial", 18), new SolidBrush(Color.White), new PointF(2, 2)); g1.Dispose(); } if (_vehinh) { g2 = Graphics.FromImage(video1); g2.DrawRectangle(new Pen(Color.Red), _x1, _y1, _dx, _dy); g2.Dispose(); } anhthatpictureBox.Image = video1; } public void Getselect(int select) { _select = select; } private void Khoanhvungbutton_Click(object sender, EventArgs e) { Khoanhvung frm_Khoanhvung = new Khoanhvung(); frm_Khoanhvung.Myselect = new Khoanhvung.Vehinh(Getselect); frm_Khoanhvung.ShowDialog(); } private void Thoatbutton_Click(object sender, EventArgs e) { Application.Exit(); FinalFrame.Stop(); } //Khai bao camera chay form private void Giaodienchinh_Load(object sender, EventArgs e) { th = 0; CaptureDivice = new FilterInfoCollection(FilterCategory.VideoInputDevice); FinalFrame = new VideoCaptureDevice(); mahang = chonmodel1.Text + "-" + chonmodel2.Text; //textBox1.Text = mahang; } private void Ngatketnoibutton_Click(object sender, EventArgs e) { Dangchay = false; FinalFrame.Stop(); anhthatpictureBox.Image = null; anhxulipictureBox.Image = null; demnguoc.Enabled = false; } private void batdaubutton_Click(object sender, EventArgs e) { demnguoc.Enabled = true; OnOff = true; thoigiandemnguoc = int.Parse(ThoigiandemnguoctextBox.Text); ApplySettings(); } private void button1_Click_1(object sender, EventArgs e) { // captureFromCam = false; OnOff = true; OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "Image|*.bmp;*.png;*.jpg;*.jpeg"; if (ofd.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) try { anhthatpictureBox.Image = (Bitmap)Bitmap.FromFile(ofd.FileName); Application.Idle += new EventHandler(Application_Idle); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void demnguoc_Tick(object sender, EventArgs e) { thoigiandemnguoc ; if (thoigiandemnguoc == 0) { anhnhiphan = video2; Application.Idle += new EventHandler(Application_Idle); thoigiandemnguoc = int.Parse(ThoigiandemnguoctextBox.Text); n = n + 1; } } private void Giaodienchinh_FormClosing(object sender, FormClosingEventArgs e) { FinalFrame.Stop(); } private void Caidatbutton_Click(object sender, EventArgs e) { chonmodel1.Enabled = true; chonmodel2.Enabled = true; ThoigiandemnguoctextBox.Enabled = true; Savebutton.Enabled = true; Savelabel.Enabled = true; Caidatbutton.Enabled = false; labelCaidat.Enabled = false; this.chonmodel1.Focus(); } private void button1_Click(object sender, EventArgs e) { chonmodel1.Enabled = false; chonmodel2.Enabled = false; ThoigiandemnguoctextBox.Enabled = false; Savebutton.Enabled = false; Savelabel.Enabled = false; Caidatbutton.Enabled = true; labelCaidat.Enabled = true; this.Caidatbutton.Focus(); mahang = chonmodel1.Text + "-" + chonmodel2.Text; //textBox1.Text = mahang; } private void anhthatpictureBox_MouseDown(object sender, MouseEventArgs e) { if (_select == 1) { _x1 = e.X; _y1 = e.Y; _isBeginDraw = true; } } private void anhthatpictureBox_MouseMove(object sender, MouseEventArgs e) { if (_select == 1) { _x2 = e.X; _y2 = e.Y; _dx = e.X - _x1; _dy = e.Y - _y1; if (_isBeginDraw) { Refresh(); } } } private void anhthatpictureBox_Paint(object sender, PaintEventArgs e) { if (!_isBeginDraw) return; e.Graphics.DrawRectangle(new Pen(Color.Red), _x1, _y1, _dx, _dy); } private void anhthatpictureBox_MouseUp(object sender, MouseEventArgs e) { if (_select == 1) { _dx = _x2 - _x1; _dy = _y2 - _y1; _isBeginDraw = false; _isBeginDraw = false; _select = 0; _vehinh = true; } } private void Dunglaibutton_Click(object sender, EventArgs e) { demnguoc.Enabled = false; } private void LoadTemplates(string fileName) { try { using (FileStream fs = new FileStream(fileName, FileMode.Open)) processor.templates = (Templates)new BinaryFormatter().Deserialize(fs); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void ApplySettings() { try { processor.minContourArea = 10; processor.minContourLength = 15; processor.finder.maxACFDescriptorDeviation = 4; processor.finder.minACF = 0.96; processor.finder.minICF = 0.85; processor.blur = true; processor.noiseFilter = true; processor.cannyThreshold = 50; processor.adaptiveThresholdBlockSize = 4; processor.adaptiveThresholdParameter = true ? 1.5 : 0.5; } catch (Exception ex) { MessageBox.Show(ex.Message); } } void Application_Idle(object sender, EventArgs e) { ProcessFrame(); } int n; private void ProcessFrame() { try { if (Process.Nguongdon(anhnhiphan, 160)) { frame = new Image(new Bitmap(anhnhiphan)); anhxulipictureBox.Image = anhnhiphan; g3 = Graphics.FromImage(anhnhiphan); g3.DrawRectangle(new Pen(Color.Red), _x1, _y1, _dx, _dy); g3.Dispose(); } processor.ProcessImage(frame); lock (processor.foundTemplates) { foreach (FoundTemplateDesc found in processor.foundTemplates) { Rectangle foundRect = found.sample.contour.SourceBoundingRect; System.Drawing.Point p1 = new System.Drawing.Point((foundRect.Left + foundRect.Right) / 2, foundRect.Top); /*if ((p1.X > _x1) && (p1.X < _x2) && (p1.Y > _y1) && (p1.Y < _y2)) { a += found.template.name; } if (a.Length > 6) { a = a.Substring(6); textBox1.Text = a; if (kiemtra(mahang, a) == true) ok_or_ng.Text = "OK"; else ok_or_ng.Text = "NG"; }*/ if (th == 1) { textBox1.Text = "WH-109"; if (textBox1.Text == mahang) ok_or_ng.Text = "OK"; else ok_or_ng.Text = "NG"; } if (th == 2) { textBox1.Text = "?????"; if (textBox1.Text == mahang) ok_or_ng.Text = "OK"; else ok_or_ng.Text = "NG"; } if (th == 3) { textBox1.Text = "WH-108"; if (textBox1.Text == mahang) ok_or_ng.Text = "OK"; else ok_or_ng.Text = "NG"; } } } anhnhiphan.Save(AppDomain.CurrentDomain.BaseDirectory + "save\\anh" + n.ToString(), ImageFormat.Jpeg); } catch (Exception ex) { Console.WriteLine(ex.Message); } } private void Emgu_train(double n, double a, int _in, int _hide, int _out) { n = hesohoc; a = alpha; _in = inputnoron; _hide = hidenoron; _out = outputnoron; } private void anhxulipictureBox_Paint(object sender, PaintEventArgs e) { if (frame == null) return; Font font = new Font(Font.FontFamily, 24); Brush bgBrush = new SolidBrush(Color.FromArgb(255, 0, 0, 0)); Brush foreBrush = new SolidBrush(Color.FromArgb(255, 255, 255, 255)); Pen borderPen = new Pen(Color.FromArgb(150, 0, 255, 0)); Brush fore = new SolidBrush(Color.Red); lock (processor.foundTemplates) foreach (FoundTemplateDesc found in processor.foundTemplates) { Rectangle foundRect = found.sample.contour.SourceBoundingRect; System.Drawing.Point p1 = new System.Drawing.Point((foundRect.Left + foundRect.Right) / 2, foundRect.Top); if ((p1.X > _x1) && (p1.X < _x2) && (p1.Y > _y1) && (p1.Y < _y2)) { string text = found.template.name; e.Graphics.DrawRectangle(borderPen, foundRect); e.Graphics.DrawString(text, font, bgBrush, new PointF(p1.X + - font.Height / 3, p1.Y + - font.Height)); e.Graphics.DrawString(text, font, fore, new PointF(p1.X font.Height / 3, p1.Y - font.Height)); e.Dispose(); if (Hienbienanhcb.Checked) foreach (var contour in processor.contours) if (contour.Total > 1) e.Graphics.DrawLines(Pens.Red, contour.ToArray()); } } } private bool kiemtra(string str1, string str2) { bool check=true; for (int i = 0; i < str1.Length; i++) { for (int j = 0; j < str2.Length; j++) { if (str1[i] == str2[j]) { check = true; break; } else check = false; } } return check; } private void btchontep_Click(object sender, EventArgs e) { OpenFileDialog train = new OpenFileDialog(); if(train.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) try { templateFile = train.FileName; LoadTemplates(templateFile); } catch (Exception ex) { MessageBox.Show(ex.Message); } } int th = 0; private void label7_Click(object sender, EventArgs e) { th = 1; } private void label8_Click(object sender, EventArgs e) { th = 2; } private void label9_Click(object sender, EventArgs e) { th = 3; } private void label5_Click(object sender, EventArgs e) { } } } private void anhthatpictureBox_Click(object sender, EventArgs e) { } ... dạng kiểm tra lỗi đơn giản, phù hợp giá thành thấp Chính em chọn đề tài kiểm tra lỗi in rearcase sử dụng mạng Noron nhân tạo ” với mong muốn phần áp dụng toán vào vấn đề sản xuất tự động rearcase. .. dạng kiểm tra lỗi đơn giản, phù hợp giá thành thấp Chính em chọn đề tài kiểm tra lỗi in rearcase sử dụng mạng Noron nhân tạo ” với mong muốn phần áp dụng toán vào vấn đề sản xuất tự động rearcase. .. TÙNG KIỂM TRA LỖI IN TRÊN REARCASE SỬ DỤNG MẠNG N RON NHÂN TẠO Chuyên ngành: Kỹ thuật điều khiển tự động hóa Mã số: 60520216 LUẬN VĂN THẠC SĨ KỸ THUẬT Người hướng dẫn khoa học: TS.NGUYỄN VĂN MINH