Đồ án Trạm gửi xe tự động nhận dạng biển số người gửi

Xử lý nhận dạng ảnh biển số Xử lý nhận dạng biển số để cho ra văn bản là bước quan trọng nhất trong việc xử lý biển số xe. Để có thể nhận dạng từ hình ảnh biển số cho ra văn bản text viện nhận dạng đã sửa dụng các mô hình YOLO lấy được ra ảnh. cũng như các thư viện của openCV để cắt ảnh và cho ra kết quả ảnh bằn tesseract để cho ra văn bản text từ hình ảnh biển số. 3.2.4.1 Mô hình áp dụng thực tế về xử lý nhận dạng biển số Ảnh Độ chắc chắn Bounding box Cắt ra ảnh biển sô Ảnh xám Cắt ra ảnh biển sô Bức ảnh chữ số Hình 3.7 Mô hình xử nhận dạng ảnh thực tế Đầu tiên ảnh đầu vào sẽ được cho vào sẽ được vào mô hình YOLO để tách ra các Bounding box (có tọa độ), sau đó ảnh sẽ được cắt với openCV để cho ra ảnh chỉ có biển số và chuyển ảnh đó về ảnh xám để xử lý, tiếp theo là cắt ra từng ký tự có trong ảnh và cuối cùng là dùng tesseract để nhận dạng chuyển ký tự chữ số về dạng text, quy trình này được thể hiện trên hình 3.6. 3.2.4.2 Chụp ảnh đầu vào đưa vào raspberry xử lý Hình 3.8 Ảnh biển số xe đưa vào xử lý Sau khi raspberry chụp ảnh được từ camera ảnh sẽ được đưa vào xử bên trong khối xử lý trên raspberry để cắt được ra khung ảnh, ảnh có kích thước tùy ý do được xử lý bằng mô hình YOLO nhưng trong trường hợp này để cho việc giảm bớt số lượng ma trận xử lý, tăng tốc độ tính toán camera cho raspbery chọn ảnh có kích thước 448x640 để làm ảnh đầu vào xử lý, ảnh đầu vào xử lý được thể hiện trên hình 3.7. 3.2.4.3 Cắt ảnh biển số có trong hình chụp ảnh biển số. Hình 3.9 Ảnh đã được cắt bằng mô hình YOLO Sau khi qua mô hình YOLO để xử lý cho ra được Bounding box và dùng thư viện openCV để cắt tấm ảnh chỉ chứa biển số theo các thông số YOLO đã đưa ra để giảm bớt dung lượng của ảnh giúp rễ dàng cho việc nhận dạng ra chữ số trong biển số ảnh đã được cắt bớt và kết quả được hiển thị như trên hình 3.8. 3.2.4.4 Xử lý ảnh xám đầu vào Hình 3.10 Ảnh biển số xử lý về ảnh xám Do biển số xe được chụp lại sẽ có độ sáng không đồng đều giữa các vùng mà có thể bị chuyển từ sáng sang tối và ngược lại nên dùng tách ngưỡng có thể gây ra ảnh có những vùng đen thành trắng, trắng thành đen. Vì vậy, Chuyển ảnh về xám chúng ta cần chọn một ngưỡi thích hợp, ở trong hình trên mức tách đã chọn ngưỡng ảnh tách 100 để chuyển ảnh về anh xám giúp việc tìm ra các đường biên của ký tự trong ảnh một cách rễ dàng hơn, dùng thư thư viện openCV để chuyển ảnh về ảnh nhị phân như hình 3.9. 3.2.4.5 tìm ra đường viền của các chữ số có trong anh Hình 3.11 Cắt ra các đường viền biển số Tìm ra các contours (đường viền) bao quanh các ký tự ta thu được các hình chữ có ảnh như hình 3.10, các chữ số tách ra riêng biệt để nhận dạng từng ký tự một cách riêng biệt. 3.2.5.6 Kết quả nhận dạng ảnh biển số có trong hình Hình 3.12 Kết quả sau khi nhận dạng biển số Sau khi xử lý khoanh vùng được các ký tự có trong biển số và tách được từng ký tự biển số có trong hình 3.11, để cho ra text thư viên được sửa dụng là tesseract để nhận dạng cho ra văn bản text dựa vào các ảnh ký tự vừa có được trong hình 3.11. Tóm lại: Kết quả của chương 2 bao gồm các bước thiết kế mà yêu cầu ban đầu của hệ thống đề ra, các bước huấn luyện mạng lưới cho ra kết quả và kèm theo đó là kết quả đầu ra của từng bước đạt được

docx64 trang | Chia sẻ: hachi492 | Ngày: 07/01/2022 | Lượt xem: 514 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Đồ án Trạm gửi xe tự động nhận dạng biển số người gửi, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
m của phương pháp Giảm bớt nhân công do sửa dụng phương pháp tự động chụp ảnh và nhận dạng biển số xe từ camera. Biển số và thời gian về xe ra vào được tự động lưu trữ tự động. Thông tin xe vào ra được hiển thị ngay trên màn hình. Nhược điểm của phương pháp Có hộp lớn và cồng kềnh gây tốn diện tích như hình 1.3, bên cạnh đó những máy tính này trong khi chạy đòi hỏi phải có nguồn điện cung cấp đủ lớn như điện lưới, nếu công xuất tiêu thu trung bình của môt máy tính cậy trung bình là 200W nếu bật liên tục một ngày liên tục 10h có thể tiêu thu 2KW.h gây tốn điện nếu sửa dụng với thời gian dài và nhiều chạm. 1.2.2 Mô hình áp dụng raspberry 1.2.2.1 Sơ đồ khối Với nhiệm vụ bao gồm xử lý ảnh chụp được từ camera chụp được nhận dạng biển số có trong hình, cho ra văn bản text và chuyển file nhận dạng đó lên server để lưu trữ và xử lý giúp quản lý cũng như giám sát các phương tiện đi ra vào trong tại nơi đặt thiết bị một cách rễ dàng theo mô hình áp dụng được thể hiện trên hình 1.4, hình là mô hình tổng quan về xử lý ảnh trên raspberry. Mô hình bao gồm các khối được thể hiện sau đây. Đầu vào xử nhận dữ liệu tương tự từ ngoài vào camera là một ảnh vào có độ phân giải 640x480. Khối xử lý: là một module xử lý chạy trên nên tảng hệ thống nhúng như rasberry pi, BeagleBone Black, FPGA. Khối truyền tín hiệu lên server có chức nhân truyền các dữ liệu thu được từ các thiết bị truyền lên server để rễ quản lý và xử lý do mặt hạn chế về dung lượng bộ nhớ cũng như các tài nguyên về tốc độ CPU của thiết bị tầng dưới. Khối nguồn có chức năng cung cấp nguồn đầu vào cho khối đâu vào, khối xử lý. Có thể dùng nguồn hạ áp từ adapter hoặc pin cung cấp phòng trường hợp tại các nơi có thể xẩy ra mất điện thường xuyên gây ảnh hưởng tới thiết bị. Đâu vào UDP/ TCP nguồn Truyền lên server Xử lý Hình 1.4 Thiết kế mô hình tổng quan hệ thống áp dụng raspberry Ưu điểm khi áp dụng raspberry Giá thành: So với áp dụng máy tính cây raspberry có giá thành rẻ hơn do nếu mua một bộ xử lý chỉ có giá hơn 1 triệu trong khi đó áp dụng máy tính để xây dựng nên hệ thống máy tính cây ước tính giá cho mỗi máy tính để có thể xửa dụng được vào 8 triệu. Diện tích: Khi áp dụng máy tính cây có kích thước khoảng 300 x 170 x 350 cm gấp tầm khoảng 350 lần kích thước raspberry => dụng raspberry phù hợp hơn khi áp dụng với các không gian có kích thước nhỏ và có thể rễ dàng lưu động. Tiêu thu điện: raspberry do tiêu tụ điện năng thấp chưa đến 10w nên có thể tích hợp được pin dự phòng tránh tìn trạng mất điên, một điều mà với các máy tính cây hầu như là điều không thể thực hiện. Tính khả thi của rasspberry Khối xử lý – Rasberry Pi3: Tổng quan Được coi mà máy tính mini, với ưu thế nhỏ gọn nhưng đủ sức mạnh thực hiện các tác vụ không quá phức tạp, có thể tiền xử lý dữ liệu ngay từ đầu vào. Đặc tính xây dựng quanh bộ xử lý SoC Broadcom BCM2835 bao gồm CPU, GPU, bộ xử lý âm thanh/video & các tính năng khác được tích hợp trong chip có điện năng thấp này. Được ứng dụng trong hệ thống điện tử, những dự án DIY, thiết lập hệ thống tính toán rẻ tiền Hình 1.5 Hình ảnh raspberry pi Trên hình 1.5 là hình ảnh chụp thực tế của raspberry bao gồm các chip xử lý, ram cổng kết nối ethernet và camera như trên lý thuyết bên trên đã nêu ra. Phần cứng: SoC 1,4GHz với 1GB RAM 1 cổng HDMI cho đầu ra âm thanh/ video số 1 cổng video RCA cho đầu ra video Analog Jack Headphone Stero 3.5mm cho đầu ra âm thanh Analog 02 cổng USB 01 đầu đọc thẻ nhớ SD 01 cổng Ethernet LAN Hệ điều hành & phần mềm Chủ yếu chạy các Distributions Linux (nhúng) như Raspbian, Pidora, openSUSE. OpenWRT, OpenELEC Khối xử lý – camera raspberry Giới thiệu: Là module camera do Raspberry Pi Foundation thiết kế. Được tích hợp với camera 5 Megapixel có độ nhạy sáng cao, chụp tốt ở nhiều điều kiện. Câu lệnh kết nối: Đăng nhập với user pi: $sudo raspi-config Chọn mục Enable Camera, sau đó chọn Enable Hình 1.6 Hệ điều hành cho raspberry Các khối chức năng chi tiết về raspberry được thể hiện bằng lý thuyết sẽ được trình bày một cách chi tiết trên hình 1.6 để có một cách nhìn tổng quan nhất về các ngoại vi cũng như các block có trên raspberry có thể được áp dụng giúp cho công việc nhận dạng biển số xe. Mộ số thuật toán xử lý ảnh Việc đánh giá để được ra phương án tối ưu nhất cho việc sửa dụng thư viện áp trên raspberry là một điều cực kỳ quan trọng, việc đánh giá này sẽ được thể hiện qua việc áp dụng có khả thi hay không cũng như cải thiện tốc độ tính toán trên nền tảng bo nhúng có hạn chế về tài nguyên như raspberry này. Dưới đây là một số phương pháp đang được áp dụng để thực thi đề tài này. Thư viện OpenCV OpenCV (Open Source Computer Vision) là một thư viện mã nguồn mở hàng đầu cho thị giác máy tính (computer vision), xử lý ảnh và máy học, và các tính năng tăng tốc GPU trong hoạt động thời gian thực. OpenCV được phát hành theo giấy phép BSD, do đó nó hoàn toàn miễn phí cho cả học thuật và thương mại. Nó có các interface C++, C, Python, Java và hỗ trợ Windows, Linux, Mac OS, iOS và Android. OpenCV được thiết kế để tính toán hiệu quả và với sự tập trung nhiều vào các ứng dụng thời gian thực. Được viết bằng tối ưu hóa C/C++, thư viện có thể tận dụng lợi thế của xử lý đa lõi [2]. Ưu điểm ứng dụng của OpenCV: Rễ dàng áp dụng và cài đặt Nhanh, nhỏ gọn, có thể trên chạy trên nhiều nền tảng như windown, linux, mac.. Không cần dữ liệu để huấn luyện. Nhược điểm ứng dụng của OpenCV: Khó nhận dạng các biển số nếu độ sáng thay đổi hoặc các biển số bị nhòe. Kích thước biển số xe thay đổi(quá lớn hoặc quá bé) sẽ dẫn tới tình trạng sai lệch của phương pháp. Để áp dụng được cần đặt góc và khoảng camera thích hợp dẫn tới công việc lắp đặt các thiết bị phần cứng trở nên khó khăn. Thư viện EmguCV Emgu CV là một trình bao bọc .Net đa nền tảng cho thư viện xử lý ảnh OpenCV. Cho phép các hàm OpenCV được gọi từ các ngôn ngữ tương thích .NET như C, VB, VC ++, IronPython, v.v ... Trình bao bọc có thể được Visual Studio, Xamarin Studio và Unity biên dịch, nó có thể chạy trên Windows, Linux, Mac OS X, iOS, Điện thoại Android và Windows. Ưu điểm áp dụng thư viện EmguCV Được viết hoàn toàn bằng C# nên có thể chạy được trên bất kỳ nền tảng hộ nào của IOS, Android, Windown, Linux Có thể sửa dụng được nhiều ngôn ngữ khác nhauu như C#, C++, Python Xử lý khử nhiễu, điều chỉnh độ sáng Có thể gọi trực tiếp các chức năng từ thư viện OpenCV. Nhược điểm áp dụng thư viện EmguCV Tốc độ xử lý chậm do vậy khó áp dụng trên một số nền tảng tài nguyên thấp. Bắt người dùng phải include tất cả các file dll với dung lượng lớn. Thuật toán Haar Cascade Haar Cascade là một thuật toán phát hiện đối tượng dùng machine learning, nó được dùng để xác nhận các đối tượng trong hình ảnh hoặc video. Đó là một cách tiếp cận dựa trên machine learning, trong đó chức năng xếp tầng được đào tạo từ rất nhiều hình ảnh tích cực và tiêu cực. Sau đó, nó được sử dụng để phát hiện các đối tượng trong các hình ảnh khác. Thuật toán dựa trên sự áp dụng cơ bản về các đặc trung của khuôn mặt người để áp dụng đối với việc nhận dạng biển số, như một số đặc trưng: Đặc trưng về cạnh (edge features) Đặc trung về đường (line features) Đặc trưng xung quanh tâm (center-surrourd features) => một số thuật toán liên qua đến Haar Cascade do áp dụng trên nền tảng nhận dạng khuôn mặt nên có nhược điểm lớn nhất là chỉ nhận dạng được các ảnh với biển số dạng gần giống với khuôn mặt (vuông) nên khó áp dụng cho bài toán tổng thể. Thuật toán Support Vector Machine (SVM) SVM là một thuật toán giám sát, nó có thể sử dụng cho cả việc phân loại hoặc đệ quy. Tuy nhiên nó được sử dụng chủ yếu cho việc phân loại và được dùng để phân loại các lớp dữ liệu được thể hiện như trên hình 1.7 đã được trình bày bên dưới. Dưới hình 1.7 sẽ có đường phân lớp tín hiệu bao gồm hai loại dữ liệu xanh và đỏ như bên dưới đây. Hình 1.7 Phân cách các điểm dữ liệu trong thuật toán SVM Ưu điểm của việc áp dụng SVM Xử lý trên không gian số chiều cao (ảnh màu): áp dụng trong các bài toán phân loại văn bản và phân tích quản điểm. Tiết kiệm bộ nhớ: do chỉ có một tập hợp con của các điểm được sử dụng tỏng quá trình huấn luyện và ra quết định thực tế cho các điểm dữ liệu mới nên chỉ có những điểm cần thiết mới được lưu trữ trong bộ nhớ khi ra quyết định Tính linh hoạt: phân lớp áp dụng các kernel nên cho phép tính linh hoạt của việc thay đổi các ma trận kernel này. Nhược điểm của việc áp dụng SVM Chưa thể hiện xác xuất nhận đúng: do chỉ việc cố gắng phân tách các đối tượng vào được lớp phân tách. Bị nhầm trong các bài toán với tập dữ liệu lớn có nhiều đối tượng cần nhận dạng cho kết qua không cao. Dùng mô hình YOLO Thuật toán được viết dựa trên neural network nhưng xử lý ở không gian ba chiều, là môt trong những mô hình Deep learing tiên tiến giúp cho chúng ta xây dựng được những hệ thống thông minh với độ chính xác cao đang được áp dụng phổ biến như trên Facebook, Google hay Amazon đã thêm vào chức năng nhận dạng khuôn mặt người dùng. Mạng CNN bao gồm tập hợp nhiều lớn Convolution chống lên và thêm vào đó là một số lớp Pooling layer để giảm bớt thông tin đầu ra cần tính toán giúp thu nhỏ không gian ma trận đầu vào cho mạng tiếp theo. Một số mô hình phổ biến áp dụng hiện nay như YOLO, R-CNN, SSD Trong bài này lý thuyết sẽ trình bay lý thuyết cũng như áp dụng mô hình YOLO nên dưới đây sẽ là ưu và nhược điểm của phương pháp. Nhược điểm mô hình YOLO Khó áp dụng ban đầu do cần phải có nguồn dữ liệu cực kỳ lớn huấn luyên để đảm bảo độ chính xác do đó bước đầu làm thuật toán này sẽ gây ra một số khó khắn trong quá trình huấn luyện. Có độ chính xác thấp, khó áp dụng khi nhận dạng cỡ chữ có trong biển số. Với các biển số có độ nghiên thuật toán khó áp dụng do đối tượng nhận dạng da đa số là ảnh hình vuông biển số. Ưu điểm YOLO Gọn nhẹ dễ dàng áp dụng trên một số nền tảng nhúng. Cho ra tốc độ nhanh và khá chính xác. Là một như viện mã nguồn mở nên có thể được áp dụng vào mục đích thương mai. Tóm lại: sau khi xem xét về hệ thống trạm gửi xe nhận dạng biển số người gửi khi áp dụng raspberry chúng ta sẽ có các mặt lợi thế cả về giá thành, không gian và độ tiện lợi trong trường hợp mất điện. Thêm vào đó là tính chất khả thi của dự án nhờ vào bộ xử lý tốc độ cao, hệ điều hành nhúng được tích hợp và giao tiếp thông qua ethernet góp phần truyền dữ liệu tốc độ cao lên server để thực hiện lưu trữ, tính toán. Một số phương pháp đang được áp dụng để nhận dạng biển số hiện nay là dùng thư viện OpenCV, EmguCV, SVM các thuật toán này có thể dễ dàng áp dụng trên một số hệ thống máy tính lớn nhưng để áp dụng xuống các bo nhúng đòi hỏi phải có sự tương thích hệ điều hành và tài nguyên đủ để đảm bảo được thời gian tối ưu đủ đáp ứng thời gian chờ của người gửi xe không quá lâu. Để làm được điều đó lý được áp đưa ra xoay quanh mô hình lý thuyết về mạng neural network được áp dụng trong trường hợp này và giao thức truyền nhận dữ liệu TCP/IP được áp dụng trong quá trình thực thi ở chương tiếp theo đây. CHƯƠNG 2. MÔ HÌNH LÝ THUYẾT ÁP DỤNG TRÊN TRẠM GỬI XE Lý thuyết về các mô hình mạng Neural network là những thuật toán cổ xưa ít ai biết tới và chỉ mới được đề cập những năm gần đây do sự phát triển của bộ xử lý máy tính đáp ứng được sự tính toán cồng kềnh và phức tạp của các ma trận đầu vào, do đó lý thuyết về về mạng neural network hầu như là một vấn đề mới và khá nhiều lý thuyết đòi hỏi phải xây dựng các mô hình với độ chính xác cao dựa trên các lý thuyết hiện có, vì thế việc tìm hiểu về các lý thuyết này là một điều vô cùng quan trong để có thể thực thi được nhiệm vụ đề ra. Lý thuyết mô hình neural network Mô hình neural network Neural network là mô hình toán học mô phỏng nơron trong hệ thống thần kinh của con người. Trên hình 2.1 là cấu trúc mạng neuron thần kinh khi so sánh với mạng neural network nhân tạo được sửa dụng để giải quết nhiệm vụ ban đầu đề ra. Input layer Output layer z Y x0 x1 x2 xd Hình 2.1 Cấu trúc mạng neuron thần kinh [3] Đầu vào của network được minh họa bằng các node được gọi là tầng đầu vào(input layer), số nút trong một input layer là d+1, các trọng sô w0, w1,,wd được gán bằng d các mũi tên đi tới node Z = å wi .xi , dữ liệu đâu vào từ các input layer sau khi lấy i=0 tổng các trọng số được lưu vào biến Z sau khi đi qua hàm kích hoạt được đầu ra Y. Một mô hình mạng neural network khá giống với một node nhỏ của sợ thần kinh sinh học. dữ liệu từ nhiều dây thần kinh tương ứng đi về một cell nucleus, cell nuclus d đóng vai trò như bộ lấy tổng có trọng số å wi .xi . Thông tin này sau đó được tổng i=0 hợp tượng tự như một hàm kích hoạt ở mạng neural network và đưa ra đầu ra, do đó tên gọi neural network được khởi nguồn từ đây[4], các dữ liệu về các lớp input, hidden layer và output được thể hiện như hình 2.2. input Hidden layer1 Hidden layer2 output Hình 2.2 Mô hình mạng neural network Mỗi một neural network là tập hợp của rất nhiều one neural hợp thành từ nhiều đầu vào input, các đầu vào này với mỗi trọng số nhất định sẽ cho ra một đầu ra, tập hợp nhiều đầu ra tạo thành được sắp xếm thành các mạng lưới và chia theo các tầng ẩn (hidden layer), tầng sau sẽ là đâu vào của tần trước để tiến hành xử lý, và việc xư lý mỗi tầng phụ thuộc vào yêu cầu cụ thể của từng bài toán mà ta có các cách xử lý khác nhau. Convolution neural network Một số kiến thức về mạng Neural Network làm việc với machine learning, deep learning hay CNN (Convolution Neural Netwoks). Là một chuỗi các layer chuyển đổi bao gồm các kiến trúc có thể sử dụng trong bài là: Convolutional Layer Pooling Layer Full-Connected Layer Với kiến trúc tinh gọn hơn neural network không gian được sắp xếp theo chuỗi không gian ba chiều. Mạng CNN bao gồm nhiều lớp Convolution chồng lên nhau và được sửa dụng hàm phi tuyên (nonlinear activation) như ReLU để làm hàm kích hoạt các trọng số có trong các node, mỗi một lớp sau thông qua các hàm kích hoạt sẽ làm đầu vào cho lớp tiếp theo, nhờ vậy mà ta có các kết nối cục bộ giữa các lớp với nhau. Convolutional Layer Mục đích là trích ra đặc trưng của ảnh đầu vào dựa trên các lớp tích chập. Convolution Layer thực hiện tính toán giữa ma trận ảnh đầu vào với kernel. Đây là một ma trận sẽ quét qua ma trận dữ liệu đầu vào, từ trái qua phải, trên xuống dưới, và nhân tương ứng từng giá trị của ma trận đầu vào mà ma trận kernel rồi cộng tổng lại, đưa qua activation funciton (sigmoid, relu, elu, ... ), kết quả sẽ là một con số cụ thể, tập hợp các con số này lại là 1 ma trận nữa. Convolution Layer như 1 cửa sổ trượt, Các giá trị trong mỗi filter sẽ không thay đổi trong suốt quá trình dịch chuyển. Ví dụ thực hiện đầu vào của lớp convolution layer. Sau khi kernel quét qua từng phần tử đầu vào. Và tính toán nhân tương ứng ta sẽ thu được rồi cộng tương ứng ta sẽ thu được giá trị feature map được thể hiên như bên dưới đây. Thực hiện lần lượt các bước tính toán ta sẽ thu được kết quả sau: Ví dụ như khi áp dụng các giá trị kernel khác nhau ta sẽ thu được các kết quả như hình 2.3, tương ứng với mỗi một kernel khác nhau ta sẽ trích xuất được một đặc trưng khác nhau của từng ảnh trong hình 2.3[5] Hình 2.3 Minh họa các ứng dụng của Convolutional Layer Pooling Layer Pooling Layer (còn gọi subsampling/ downsample) là một trong những thành phần tính toán chính trong cấu trúc Convolution Neural Netwoks. Về mặt toán học, bản chất của Pooling là quá trình tính toán trên ma trận với mục tiêu là giảm kích thước ma trận nhưng vẫn nổi bật lên đặc trưng có trong ma trận đầu vào. Việc giảm kích thước này tập trung giảm parameters. Bằng việc dùng cửa sổ trượt, trượt qua từng giá trị đầu vào, và trong cửa sổ đó chọn ra một giá trị lớn nhất làm đặc trưng. Trong trường hợp ta có một một ảnh ở dưới dạng ma trận có kích thước W´ H ´ D tương ứng lần lượt là chiều dài, rộng và chiều sâu (màu) của ma trận điểm ảnh và với một ma trận kernel có kích thước F ´ F , số bước nhảy giữa hai ma trận là S thì ta sẽ xác định được kích thước đầu ra bằng công thức Wout = W - F +1 S Với kích thước đầu ra là: Wout ´ Hout ´ D [6] Ví dụ với cửa số trượt bằng 2x2 khi trượt qua đầu vào ta sẽ có ma trận sau: 5 8 1 2 6 6 4 3 2 3 8 9 8 9 7 6 input Full-Connected Layer kernel  8 4 9 9 output Hình 2.4 Minh hoa ứng dụng dùng 2 lớp Full-Connected Layer Full-connected là cách kết nối các neural ở 2 tầng với nhau trong đó tầng sau kêt nói đầy đủ với các neural ở tầng trước và thường được sửa dụng ở tầng phía cuối của mạng. Ví dụ dùng 2 lớp Full-Connected Layer ở cuối mạng có thể được nhìn thấy như trong hình 2.4 thể hiện mô hình kết nối giữa các lớp đầu vào (input), trải qua các lớp convolution layer và max pooling ta thu được kết quả đầu ra output như hình 2.4. ReLU – Rectified Linear Unit 6 -7 9 8 9 8 -3 2 3 4 6 -6 2 -1 8 5 6 0 9 8 9 8 0 2 3 4 6 0 2 0 8 5 Về cơ bản hàm ReLU là loại bỏ các giá trị âm, hoán đổi nó với giá trị của 0, điều này giúp cho khi đi qua nhiều tầng giá trị kết quả không bị mắc kẹt tại 0 hoặc trôi dần về phía vô cùng. Tóm lại CNN là sự biến đổi của nhiều lớp đầu ra bao gồm nhiều lớp có các thành phần cơ bản như gồm Convolution (CONV), Pooling (POOL), ReLU, Fully-Connected (FC) có cấu trúc đơn giản được thể hiện như hình 2.5 áp dụng cho viện nhận dạng ảnh đầu vào(xe hơi). Hình 2.5 Kiến trúc mô hình CNN nhận dạng xe [7] Mô hình mạng YOLO Có một vài thuật toán để phát triển liên quan đến nhận dạng đối tượng được chia làm hai nhóm chính: Thuật toán dựa trên phân loại (classification): được chia làm hai bước. Đầu tiên chúng ta sẽ lựa chọn khung vực ảnh có khả năng nhất, sau đó phân loại khu vực ảnh bằng cách sửa dụng tích chập mạng tích chận CNN. Giải pháp này có thể dất chậm vì phải chạy dự đoán cho các dự đoán cho các khu vực được chọn. Ví dụ như Region-based convolutional neural network (RCNN). Thuật toán dựa trên hồi quy: thay vì chọn các phần của ảnh có khả năng, chúng ta dự đoán các lớp và các khu vực (box) cho toàn bộ hình ảnh trong một lần chạy thuật toán. Có thể kể đến nhiều nhất là thuật toán YOLO (You only look once) thường được sửa dụng để phát hiện các đối tượng với thời gian thực. YOLO (You Only Look Once) Là một bài toán cơ bản của Computer Vision nhằm trích dẫn ra các đặc trưng của ảnh thông qua việc xử dụng tích chập học sâu để phát hiện đối tượng, là một trong những phương pháp chạy nhanh nhất hiện nay để cho ra khung ảnh nhận dạng hiện nay và thậm chí có thể áp dụng dựa trên một số nền tảng IOT hiện nay như raspberry pi. Với sự ra đời cho đến thời điểm hiện tại bao gổm ba phiên bản là YOLO1, YOLO2 và YOLO3 đã mang lại hiểu quả nhất định với việc chia và tính toán tâm đối tượng có trong ảnh nhờ việc việc dựa đoán một lớp của một đối tượng và giớ hạn chỉ định đối tượng đó. Dưới hình 2.6 là mô hình tổng quan của YOLO1 được thể hiện các lớp, Mỗi hộp được giới hạn bằng mô bằng các thông số sau đây[8]. Hình 2.6 Kiến trúc mạng YOLO cơ bản[9] Ví trí trung tâm đặt của bật thể (bx by) Kích cỡ vật thể chiều rộng (width) bx, chiều cao (height) by Loại vật thể đó là gì (xe, đèn báo, động vật) Thuật toán YOLO1 Đầu tiên ta chia ảnh thành ma trận các ô vuông SxS grids, thông thường người ta sẽ chia thành 7x7, 9x9, 13x13 và 19x19 grid, mỗi ô vuông lại chứa thông tin mà mô hình phải dự đoán Để có thể lấy ra được các đối tượng (detect object). Ví dụ trong hình 2.7 là trường hợp chia ảnh thành 7x7 grids. Hình 2.7 Mô hình YOLO chia thành 7x7 grid cell[10] Mạng gồm hai thành phần chính là các convolution layer và fully-connected layer. Sau khi hình ảnh đia qua các lớp convolution layer và fully-connected layer ta thu được kết quả đầu ra output: Trong đó: S ´ S ´ (5´ B+ CL ASS ) B là vị trí của ô: mỗi grid dựa đoán B-bounding box (do trong quá trình train truyền vào), mỗi bouding box được lấy ra bao gồm vị trí và kích cỡ của ô đó. Mỗi bounding box được đăng trưng bởi năm con số bao gồm, tọa độ x,y, kích thuớc w,h và c: confidence-IOU (độ chính xác đối tượng cần detect ). IOU (intersectuib over union): là tỉ lệ giao nhau giữa hai hình. CLASS: phân bố xác xuất xem đối tượng đó thuộc class phân lớp nào. Thuật toán YOLO2 Trong khi áp dụng thuật toán YOLO1 cũng có những nhược điểm nhất định như: Chỉ nhận dạng được 1 đối tượng trên 1 grid cell. YOLO1 dự đoán các bounding box một cách trực tiếp nên kích cỡ các đối tượng trong sinh ra một cách tự do trong khi đó thực tế ta thấy hầu như các ảnh đều gần bằng nhau về kích cỡ như hình 2.8 minh họa dưới đây. Hình 2.8 Hình ảnh minh hoa các đối tượng dự đoán trong YOLO[11] Dẫn tới việc cho ra đời thuật toán YOLO2 nhằm khắc phục những nhược điểm trên của phiên bản thuật toán đời đầu. Mô hình chung Hình 2.9 Kiến trúc mô hình YOLO2 loại bỏ hai lớp fully-connnected Bằng việc thêm Anchor Boxes sau khi lên phiên bản YOLO2 đã loại bỏ các lớp fully-connected layer thay cho việc dự đoán boundary box ta có mô hình network như trên hình 2.9. YOLO2 đã di chuyển các lớp dự đoán từ cấp cell lên cấp boundary box. Bây giờ mỗi lớp dự đoán (prediction) bao gồm 4 tham số cho boundary box, mỗi Để tạo ra dự đoán với kích thước 7*7*125, chúng ta thay thế convolution layer cuối cùng với 3 convolutional layers 3*3 cho mỗi đầu ra 1024 channels. Sau đó, chúng ta thêm lớp convolutional layer 1*1 cuối cùng nhằm chuyển output 7*7*1024 thành output 7*7*125[11]. Kết hợp convolutional với Anchor Boxes (hộp mỏ neo) Trong YOLO1 phương pháp dự đoán trực tiếp bounding box có kích cỡ tự do gây ra tốn thời gian tính toán và để khắc phục nhược điểm đó phiên bản YOLO2 đã sửa dụng các box đã được định kích thước có sẵn(anchor box) và chỉ cần dự đoán phần sai lệch của các bounding box với ô đó để xác định ra bounding box cần tìm giúp detect nhiều đối tượng có trong ô đó. Để xác định được nhiều đối tượng khác nhau chúng ta sẽ cho ra nhiều hình dự đoán và tập trung vào những hình dạng cụ thể mà chúng ta cho rằng là giống với vật, vì vậy việc training ban đầu sẽ có một khoảng cố định hơn. Các anchor box này có thể được xác định đầu vào được ví dụ cụ thể bao gồm 5 anchor box như hình 2.10 được thể hiện bên dưới đây. . Hình 2.10 Hình ảnh với anchor box là 5 Direct location prediction Chúng ta có thể làm các dự đoán dựa trên sai lệch + anchors để đưa ra bounding box, tuy nhiên nếu không rằng buộc kết quả dự đoán sẽ dẫn đến việc các bounding box sẽ bị chọn ngẫu nhiên một lần nữa. YOLO2 đưa ra 5 tham số ( tx , ty , tw , th , to ) Hộp màu xanh như hình 2.11 bên dưới lần lượt là biên và hình chữ nhật chấm đỏ là tâm của anchor[11]. Hình 2.11 Hình ảnh biên giới hạn và tâm của kết quả Direct location prediction (dự đoán trực tiếp)[11] loss function YOLO dự đoán nhiều bounding boxes cho mỗi grid cell. Để tính toán loss của true positive (sự kiện mà model nhận dạng được đúng class tích cực - ví dụ : có biển số và đúng là một true positive ), chỉ cần 1 bounding box với IoU cao nhất so với ground truth. Để tính toán loss function YOLO sửa dụng sai số bình phương và ground truth để tính toán loss. Loss function bao gồm những thành phần sau: Classification loss Localization loss (sai số giữa bounding box được dự đoán với ground truth) Confidence loss (Đối tượng không nằm bên trong bounding box) Classification loss: Nếu một đối tượng được xác định, classification loss của mỗi cell là bình phương sai số của xác suất mỗi class Trong đó: Ÿ nếu đối tượng xuất hiện trong cell i, nếu không thì nó bằng 0 là xác suất đối tượng c nằm trong i Localization loss: Localization loss tính trên sai lệch về vị trí và kích thước của bounding box với ground truth. Trong đó: Ÿ nếu boundary box j của cell i chịu trách nhiệm phát hiện đối tượng, ngược lại bằng 0 Ÿ tăng weight cho loss trong vị trí boundary box Confident loss: Nếu đối tượng nằm trong box: Nếu đối tượng không nằm trong box: Trong đó: Ÿ nếu boundary box j trong cell i chịu trách nhiệm phát hiện đối tượng Ÿ là nghịch của Ÿ là confident score của box j trong cell i là weights giảm loss trong phát hiện ảnh nền1.3.4 thư viện Tesseract Optical character recognition (OCR) là một bộ thư viện mã nguồn mở được phát triển bởi google để chuyển đổi từ ảnh có chứa nội dung text sang dạng văn bản chữ viết. Tesseract được viết bằng C/C++ nhưng nó cũng hỗ trợ trên rất nhiều nền tảng như windown, linux, mac, android Kiến trúc Tesseract Tesseract có cấu trúc phổ biến step-by-step theo hình, tiền xử lý hình ảnh đầu tiên được thực hiện với ngưỡng thích ứng trong đó hình ảnh nhị phân được tạo ra. Sau đó, phân tích thành phần ký tự liên kết nhau có trong hình ảnh đầu vao. Tiếp theo là cắt và liên kết các ký tự được sử dụng để sắp xếp các phác thảo thành các từ. Cuối cùng nhận dạng được sửa dụng bằng phương pháp clustering và classification[12]. Các bước này được thể hiện cụ thể như trong hình 2.12 dưới đây. Hình 2.12 Kiến trúc Tesseract OCR[12] training Tesseract Để chuẩn bị cho việc training Tesseract cần có một ảnh của một dạng văn bản mẫu bằng cùng ngôn ngữ với văn bản đang cố nhận diện. Đối với mỗi đối tượng Tesseract tríc dẫn ra các đặt trưng của nó sau đó dùng các kỹ thuật clustering để xây dựng mô hình cho mỗi đối tượng và các mô hình đó sau cùng sẽ được sử dụng trong phương pháp classification để quết định xem chữ viết nào sẽ được nhận ra[12]. Để đào tạo cho Tesseract các thử nghiệm đã được thực hiện cho hai vấn đề cho việc nhận dạng biển số phát sinh đặt ra: Tiếp cân văn bản đào tạo đã được viết với một phông chữ làm bằng hình ảnh chữ duy nhất có trong hình Dùng các phông chữ tương tự nhau đã được viết với cùng một phông ví dụ như chữ cắc cặp chữ T va số 1, chữ Z và số 2 Giao thức truyền thông TCP Mô hình socket Socket cung cập một interface để lập trình mạng tại tầng Transport. Một socket là một end-point của một liên kết giữa hai ứng dụng. Ngày nay, socket hầu như được hỗ trợ trên rất nhiều hệ điều hành đặc biệt socket còn được hỗ trợ trên các hệ điều hành như linux hoặc trên một số hệ điều hành nhúng như Raspbian do đó việc tích hợp TCP socket trên những nền tảng này là một điều khả quan. Hình 2.13 dưới đây là mô hình truyền thông qua TCP socket được thể hiện qua các bước sẽ được trình bày ở phần lý thuyết ngay tiếp theo hình đây. Client server Giai đoạn 1 Giai đoạn 2 Connect() Access() write read write Giai đoạn 3 read Close() Giai đoạn 4 Listen() Bind() Close() Hình 2.13 Mô hình truyền nhận file gữi client-server bằng socket Giai đoạn 1: Server sẽ tạo ra một socket, gán số hiệu cho cổng và lắng nghe yêu cầu kết nối ở cổng đó. Server sẵn sàng phục vụ client có yêu cầu kết nối đến để có thể sử dụng dịch vụ ở tầng giao vận. Bind(): gán số hiệu cổng kết nối (port) cho socket. Listen(): server lắng nghe các yêu cầu kết nối đến cổng kết nối đã được tạo. Giai đoạn 2: Client tạo ra socket, yêu cầu thiết lập một kết nối với server ở chính cổng kết nối mà server đã tạo ra trước đó. Connect(): client tạo ra một socket và gửi thông tin yêu cầu kết nối đến server thông qua công đã khởi tạo trước đó bên server. Access(): server báo ngược trở lại client cho phép kết nối đến server thông qua cổng đã mở. Ở trong hai giai đoạn đầu chủ yếu là bên phía client và server thiết lập đường truyền thông qua socket và xác nhận cho việc gửi gói tin sau này. Giai đoạn 3: Trao đổi thông tin giữa client và server. Sau khi đã kết nối server sẽ tạo ra một bộ đệm và đợi thông tin gửi từ client đến server, các gói tin sẽ được chia nhỏ và gửi đến bộ đệm của server cho đến khi nào có cờ puh (cơ giải phóng bộ nhớ) thì dữ liệu sẽ được giải phóng khỏi bộ đệm. Server sẽ phân tích kết quả gửi gói tin đến bằng lệnh read() và gửi trả tín hiệu phàn hồi bằng lệnh write(). Client sẽ gửi kết quả bằng lệnh write(), và chờ nhận kết quả phản hồi từ server bằng lệnh read(). Gói tin sẽ được chia nhỏ thành các khối cho quá trình truyền nhận dữ liệu, do đó để biết được thứ tự các gói tin gửi đến ở trong giao thức TCP sẽ có một trường Sequence number báo số gói tin đã được nhận được bên server để cho client biết được điều đó thông qua tín hiệu phản hồi để gửi gói tin tiếp theo. Giai đoạn 4: Kết thúc quá trình trao đổi. Sau khi quá trình trao đổi kết thúc client sẽ bật cờ FIN lên gửi cho bên server báo kết thúc quá trình gửi gói tin và chờ bản tin phản hồi từ bên phí server. Server sau khi nhận được gói tin sẽ gửi 2 tin hiệu đến client 1 là tín hiệu phản hồi ACK, 1 là tín hiệu cờ FIN báo kết thúc quá trình. Và cuối cùng là client sẽ gửi tín hiệu phản hổi báo nhận được cờ FIN từ server và kết thúc quá trình. Sau khi kết thúc quá trình server sẽ quay trở lại chếc độ kiểm tra kết nối bằng hàm access() và chờ cho đến khi có gói tin tiếp theo được gửi từ phía client.[13] Quá trình kết nối giữa client và server bằng phương pháp bị động trải qua 4 giai đoạn kết nối đầu tiên bên phía server sẽ khởi tạo cổng kết nối và lắng nghe xem có kết nối nào đến cổng => bên phía client sẽ tạo kết nối thông qua kết nối đã được khởi tạo bên phía server và sau đó server sẽ kết nối => quá trình gửi file giữa client và server bắt đầu cho đến khi gặp cờ báo trạng thái kết thúc có giá trị bằng 1 => client và server bắt đầu thực hiện việc kết thúc quá trình truyền nhận file dữ liệu. TCP Socket Tổng quan về TCP/IP Trong các ngành tin học và viễn thông, tầng giao vận là tầng thứ tư trong bảy tầng OSI. Tầng này chịu trách nghiệm đáp ứng các đòi hỏi vể dịch vụ của tầng phiên và đưa ra yêu cầu dịch vụ với tầng mạng (network layer). Tầng giao vận cung cấp dịch vụ xuyên dụng truyền dữ liệu giữa các máy chủ (hosts). Tầng này chịu trách nghiệm sửa lỗi (error recovery), điều khiển lưu lượng dữ liệu, đảm bảo dữ liệu được truyền tải một các chọn vẹn. Trong Bộ giao thức liên mạng- TCP/IP, chức năng này thường được thực hiện bởi giao thức định hướng kết nối TCP. Các giao thức liên mạng là bộ giao thức cho các hệ thống mở nổi tiếng nhất trên thế giới bởi vì chúng có thể được sử dụng để giao tiếp qua bất kỳ các liên mạng nào cũng như thích hợp cho các giao tiếp trong mạng LAN và mạng WAN. Các giao thức liên mạng bao gồm một bộ các giao thức truyền thông, trong đó nổi tiếng nhất là Giao thức điều khiển truyền tải (TCP - Transmission Control Protocol) và Giao thức liên mạng (IP – Internet Protocol) hoạt động ở tầng 4 và tầng 3 trên mô hình OSI. Ngoài hai giao thức này, bộ giao thức IP còn đặc tả nhiều giao thức cho tầng ứng dụng, ví dụ như giao thức cho dịch vụ thư điện tử, giao thức mô phỏng thiết bị đầu cuối và giao thức truyền tải tập tin. Bộ giao thức liên mạng lần đầu tiên được phát triển vào giữa những năm của thập niên 70 khi Văn phòng các dự án nghiên cứu chuyên sâu của bộ quốc phòng Mỹ (DARPA-Defense Advanced Research Projects Agency) quan tâm đến việc xây dựng một mạng chuyển mạch gói (packetswitched network) cho phép việc trao đổi thông tin giữa các hệ thống máy tính khác nhau của các viện nghiên cứu trở nên dễ dàng hơn. Với ý tưởng nối các hệ thống máy tính không đồng nhất lại với nhau, DARPA đã cấp kinh phí nghiên cứu cho đại học Stanford, Bolt, Beranek, and Newman (BBN) về vấn đề này. Kết quả của những nổ lực phát triển của dự án này là bộ giao thức Liên mạng đã được hoàn thành vào những năm cuối của thập niên bảy mươi. Sau đó TCP/IP được tích hợp vào hệ điều hành UNIX phiên bản BSD (Berkeley Software Distribution) trở thành nền tảng cho mạng Internet và dịch vụ WWW (World Wide Web). Và để hiểu được gói tin cho giao thức truyền nhận TCP/IP socket sẽ được trình bày ở hình 2.14 bên dưới đây. Hình 2.14 Cấu trúc gói tin TCP/IP Ý nghĩa của các trường trên hình 2.14 được mô tả như sau: Version: Xác định phiên bản của giao thức đang được sử dụng. IP Header Length: Xác định chiều dài của phần tiêu đề của gói tin, tính bằng đơn vị là từ -32 bits. Total Length: Đặc tả chiều dài, tính bằng type, của cả gói tin IP, bao gồm cả phần dữ liệu và tiêu đề. Indentification: Số nguyên nhận dạng gói tin dữ liệu hiện hành. Trường này được sử dụng để lắp ráp lại các phân đoạn của gói tin. Flags: Gồm 3 bits, bit có trọng số nhỏ để xác định gói tin có bị phân đoạn hay không. Bit thứ 2 xác định có phải đây là phân đoạn cuối cùng của gói tin hay không. Bit có trọng số lớn nhất chưa sử dụng. Fragment Offset: Biểu thị vị trí của phân đoạn dữ liệu so với vị trí ban đàu của gói dữ liệu gốc, nó cho phép máy nhận xây dựng lại gói tin ban đầu. Time to live: Lưu giữ bộ đếm thời gian, giá trị sẽ được giảm dần đến khi nó có giá trị là 0 thì gói tin sẽ bị xóa. Điều này giúp ngăn ngừa tình trạng gói tin được truyền đi lòng vòng không bao giờ đến được đích Protocol: Biểu hiện giao thức ở tầng trên sẽ nhận gói tin khi nó đã được giao thức IP xử lý. Header Checksum: kiểm tra tính toàn vẹn của phần tiêu đề. Source address: Địa chỉ của máy gửi gói tin. Destination address: Địa chỉ của máy nhận gói tin. Options: Tùy chọn cho phép để hỗ trợ một số vấn đề, chẳng hạn vấn đề bảo mật. Data: Chứa dữ liệu của tầng trên gửi xuống cần truyền đi. Kiến trúc và ưu nhược điểm mô hình Client/server Client/server là dạng phổ biến của mô hình ứng dụng phân tán trong đó phần mềm được chia thành các tiến trình client và các tiến trình server. Một client sẽ gửi yêu cầu cho một server theo một giao thức định sẵn (để server có thể thực hiện được yêu cầu của client), để lấy thông tin hoặc chỉ thị server thực hiện một tác vụ nào đó. Sau khi thực hiện xong yêu cầu của client, server sẽ trả lời. Nhìn chung, trong client/server duy trì một sự phân biệt rõ rệt giữa các tiến trình và các thiết bị mạng. Thường thì máy tính client và server sẽ là hai thiết bị mạng riêng rẽ và có kiến trúc, cấu hình theo mục đích đã được thiết kế. Ưu điểm của mô hình Client/server được phát triển với mục đích cho phép nhiều người dùng cùng chia sẻ, truy cập đến các dịch vụ hay ứng dụng database. So sánh với mainframe, client/server đem lại khả năng mở rộng tốt hơn vì thế có thể tạo ra thêm các kết nối theo nhu cầu sử dụng mà không cân phải sử dụng thêm hard- wired. Mô hình clien/server cũng hỗ trợ các ứng dụng được module hóa. Trong từng trường hợp, một phần mềm ứng dụng được chia thành nhiều module, mỗi module được cài đặt trên các hệ thống phần cứng khác nhau và được chuyên biệt hóa cho hệ thống module đó, được gọi là mô hình client/server “hai lớp“ hoặc “ba lớp“. Vì server có thể tập trung hoặc phân tán trên nhiều máy, cho phép client và server có thể tách biệt trên nhiều node trên mạng, mỗi node là một hệ thống máy tính độc lập, có cấu hình phần cứng hệ điều hành, phần mềm khác nhau để phù hợp với tính năng và nhiệm vụ của nó. Tóm lại, mục đích của client/server là để nâng cao tính dễ sử dụng (usability), tính thích nghi linh hoạt (flexibility), tính trao đổi tương tác (interoperability) và tính co giãn (scalability) của một hệ thống. Nhược điểm của mô hình Một vấn đề được quan tâm đặc biết trong mô hình client/server là quản trị hệ thống. Khi các ứng dụng được phân bố trên toàn bộ hệ thống mạng, sẽ rất khó khăn để duy trì thông tin cấu hình và nhất quán giữa tất cả các thiết bị. Tương tự nâng cấp một phiên bản mới của ứng dụng client/server rất khó đồng bộ. Cuối cùng hệ thống client/server phụ thuộc rất nhiều vào độ tin cậy của mạng. Nâng cao tính dự phòng và các tính năng chịu lỗi có thể làm tăng chi phí triển khai hệ thống. Chi phí đầu từ cho việc thiết kế, cài đặt, quản trị, bảo trì là rất lớn. Ngoài ra, những kĩ sư hệ thống và người quản trị phải đối mặt với các vấn đề hóc búa như sự tương tác trong hệ thống, tính tương thích của các thành phần cũng như việc cấu hình hệ thống. Tóm lại: Từ yều câu nhiệm vụ đặt ra ban đầu của hệ thống là làm các trạm(client) để nhận dạng ra các biển số xe và truyền dữ liệu đó lên server để phân tích xử lý dữ liệu, để làm được điều đó trong đề tài này đã tìm hiểu và trình bay lý thuyết về mạng neural network cũng như là các thuật toán ứng dụng cụ thể để giải quết vấn đề như YOLO để từ đó thực thi giải pháp nhận dạng biển số xe người gửi và truyền dữ liệu nhận được tại máy trạm lên server thông qua giao thức TCP. CHƯƠNG 3. THIẾT KẾ VÀ THỰC THI HỆ DỰ ÁN TRẠM GỬI XE Để có thể xử lý được một ảnh đầu vào từ bài yêu cầu đặt ra của nhiệm vụ là nhận dạng ra biển số và gửi lên server với chi phí tiết kiệm nhưng vẫn đảm bảo tính khả thi của nhiệm vụ, đề tài đã thiết kế hệ thống như hình 3.1 là hệ thống trạm gửi xe áp dụng raspberry. Mô hình hệ thống camera Thẻ từ(vé xe) Input Nhận dạng biển số có trong ảnh Cắt biển Process 1 Cho ra text Process 2 Thẻ đầu vào + Process 3 Truyền lên server Hình 3.1 Mô hình hệ thống Hình 3.1 thể hiện hệ thống bao gồm ảnh đầu vào từ camera trên raspberry pi B+ thông qua ba quy trình xử lý bao gồm: Process 1: Ảnh sau khi được chụp sẽ cho vào để nhận dạng xem trong hình vừa chụp có ảnh biển số hay không nếu có ảnh biển số thì sẽ tách ảnh biển số ra để đưa xuống quynh trình 2 xử lý riêng. Process 2: Ảnh chỉ có riêng biển số sau khi được tách ra từ ảnh đầu vào sẽ được cho vào Process 2 như trên hình 3.1 để xử lý cho kết quả đầu ra là dạng text, trong quy trình này nếu bức ảnh bị dạng dạng sai người trông dữ trạm xe có nhiệm vụ căn chỉnh lại văn bản text cho đúng với hình ảnh biển số để truyền gộp file dữ liệu đó truyền lên server. Process 3: Biển số dưới dạng text và ảnh thẻ từ đầu vào sau khi được tổng hợp lại thành một bản tin sẽ được truyền lên server để xử lý lưu trữ và tính toán hoặc sẽ nhận lại thông tin phản hồi từ dữ liệu từ server trong trường hợp có luông xe ra hay không để thực hiện việc mở barrier cho xe ra hay không. Luồng xử lý dữ chi tiết Xử lý luồng xe vào Dừng xe tại điểm quy định Vé ngày Vé tháng Trình vé Quét thẻ Chụp ảnh hình Nhận dạng biển số Cho ra file text Kiểm tra biển sô Nhận dạng sai Nhập biển số Nhận thẻ Tạo file text Truyền lên server Mở barier vào Cập nhật trạng thái Máy trạm Nhân viên soát vé khách Hình 3.2 Sơ đồ hoạt động xử lý xe vào Để là rõ hơn quy trình nhận dạng biển số được trình bày ở hình 3.1 sau đây hệ thống sẽ đi vào cụ thể chi tiết hơn về sơ đồ luồng xử lý dữ liệu ở trên hình 3.2 sơ đồ này cũng sẽ tương tự các tiến trình (process) đã được xử lý ở trên hình 3.1. B1: Khách sẽ vào dừng chân tại điểm quy định nhân viên xoát vé sẽ bấm nút quét thể để trạm gửi xe tự động quét thẻ đầu vao là vé tháng hay ngày để xử lý, kèm theo là chụp ảnh biển số xe bởi máy trạm để nhận dạng biển số, tại bước này trên hình 3.2 ảnh biển số sẽ được cắt ra tạo đầu vào cho bước 2. B2: Sau khi biển số xe đã được cắt ra tạo đầu vào để nhận dạng ra các ký tự và chữ số có trong ảnh (chỉ có biển số), trong bước này nếu ảnh nhận dạng biển số bị nhận dạng sai thì người soát vé có nhiệm vụ phải nhập lại ký tự cho đúng nếu đúng thì cho đi qua. B3: Nhận đầu vào thẻ từ ghép chuỗi kết quả text của thẻ từ với text ảnh biển số và truyền kết quả đó lên server, kèm theo là khách hàng sẽ nhận lại thẻ (vé xe). Xử lý luồng dữ liệu xe ra Dưới hình 3.3 là sơ đồ trình bày sơ đồ hoạt động của việc cho xe ra trong hệ thống bao gồm ba bước tương ứng với ba tiến trình xử lý đã được trình bày ở mô hình tổng quan tại hình 3.1, cụ thể về các bước chính là: B1: Khi khách lấy xe từ trong bãi đỗ ra sẽ dừng tại điểm dừng quy định và đưa vé cho nhân viên soát vé, nhân viên soát vé sẽ nhận thẻ và bấm nút chụp ảnh trên bàn phím để chụp ảnh biển số xe người vào. Sau khi chụp được ảnh biển số máy chạm sẽ tiến hành nhận dạng xem trong ảnh có biển số hay không, nếu có ảnh biển số thì cắt ra ảnh biển sô làm đầu vào cho bước 2. B2: Tại bước 2 ảnh biển số sau khi được cắt ra từ bước 1, tiếp tục ảnh chỉ có biển số sẽ được khoanh các đường viền bao quanh ảnh sau đó từ các ảnh này sẽ cho ra đầu ra dạng text, nếu ảnh biển số bị nhận dạng sai thì nhân viên soát vé có nhiệm vụ nhập lại văn bản đầu ra cho đúng để so sánh kết quả với server. B3: với luồng xử lý dữ liệu xe ra thì bước 3 sẽ là bước khác nhau nhiều nhất giữa hai quy tình xử lý cho xe vào va ra. Tại bước này sau khi ảnh biển số đã được nhận dạng text đúng với ảnh chụp đầu vào máy chạm (raspberry) sẽ gửi tín hiệu thông báo đến server để gửi ảnh dữ liệu về thẻ xuống để xử lý trung khớp với thẻ (vé xe) mà khách hàng đưa cho, nếu trùng khớp thì sẽ cho xe đi qua, nếu không trùng khớp thì sẽ báo động để có phương pháp giải quết kịp thời khách Nhân viên soát vé Máy trạm Dừng xe tại điểm quy định Vé ngày Vé tháng Trình vé Quét thẻ Chụp ảnh hình Nhận dạng biển số Cho ra file text Kiểm tra biển số Nhận dạng sai Nhập biển số Nhận file từ server Nhận thẻ, cho xe ra Báo động Hình 3.3 Sơ đồ luồng xử lý xe ra 3.3.3 Thiết kế giao thức truyền thông Định nghĩa gói tin length type value Hình 3.4 Các trường bản tin truyền lên server Gói tin được gửi lên server được thể hiện trên hình 3.4, cấu trúc bản tin ở hình 3.4 bao gồm các trường được mô ta sau đây: Length: độ dài bản tin gói tin gửi lên server. Type: Định danh bản tin Value: các tham số Gói tin cụ thể Bản tin gửi lên server khi xe vào bao gồm các trường được thể hiện như trong bảng 3.1 Bảng 3.1 Gói tin gửi lên server khi xe vào STT Tên Độ dài (Byte ) Giá trị Ý nghĩa 1 Length 4 20 Độ dài bản tin 2 Type 1 1 3 Plate number 9 Char Biển số xe 4 Card 6 Char Thẻ từ Bản tin gửi lên server yêu cầu xác nhận thẻ (vé xe) của người lấy xe ra được thể hiện tác trường và ý nghĩa các truognwf trong bảng 3.2. Bảng 3.2 Gói tin gửi lên server yêu cầu xác nhận thẻ (vé xe) STT Tên Độ dài (Byte ) Giá trị Ý nghĩa 1 Length 4 11 Độ dài bản tin 2 Type 1 2 3 Card 6 Char Thẻ từ Bản tin gửi từ trên server xuống khi gửi thẻ lên và server trả lời xuống được thể hiện trên bảng 3.3 Bảng 3.3 Gói tin phản hồi từ server khi xe ra STT Tên Độ dài (Byte ) Giá trị Ý nghĩa 1 Length 4 14 Độ dài bản tin 2 Type 1 4 3 Plate number 9 Char Biển số xe Tạo dữ liệu huấn luyện mạng Tổng hợp dữ liệu từ nguồn dữ liệu trên mạng Dữ liệu huấn luyện đầu vào sau khi có sẽ được tổng hợp bao gồm hai loại: Một loại dành để nhận dạng và cắt ảnh biển sô trong mô hình mạng YOLO Một loại dành để nhận dạng ra chữ viết sau khi đã cắt được các ô hình vuồng có chứa chữ số trong thư viện tesseract. B1: Chuẩn bị dữ liệu cho việc huấn luyện. Để tạo dữ liệu huấn luyện đâu vào bao gồm hơn 1700 ảnh đầu vào, dữ liệu đầu vào càng lớn thì tỉ lệ chính xác của mạng YOLO nhận dạng càng chính xác nhưng do không có nhiều dữ liệu nên để train hệ thống đã lấy nguồn ảnh tham khảo từ trên mạng về làm dữ liệu cho dự án. B2: vẽ trainning cho ảnh đầu ra ra Tại bước này để huấn luyện mạng hệ thống đã dùng tool “Yolo Annotation Tool” , mỗi ảnh đều khoanh vùng biển số để xuất ra tọa độ nhằm mục đích tạo ra dữ liệu huấn luyện đầu vào train mạng YOLO để có thể tạo ra các bounding box một cách chính xác nhất giúp cho quá trình cắt ảnh biển số có thể đạt kết quả cao. Thực hành các bước này được thể hiện trên hình 3.4. Hình 3.5 Ảnh dữ liệu đầu vào huấn luyến B3: train nhận dạng ký tự có trong hình Hình 3.6 Trainning ký tự nhận dạng trong ảnh Vì mỗi loại biển số có những đặc trưng ký tự riêng được quy định bởi các cơ quan chức năng nên ta có thể dựa vào những đặc trung đó để nhận dạng ra chữ có trên biển số xe. Việc chuẩn bị dữ liệu bao gồm các hình có các đường nét bị mất và cả các ký tự thường để huấn luyện trong trường hợp chụp ảnh biển số có các ký tự bị mờ hoặc bị thiếu nét, dữ liệu này được thể hiện như trên hình 3.5. 3.2.4 Xử lý nhận dạng ảnh biển số Xử lý nhận dạng biển số để cho ra văn bản là bước quan trọng nhất trong việc xử lý biển số xe. Để có thể nhận dạng từ hình ảnh biển số cho ra văn bản text viện nhận dạng đã sửa dụng các mô hình YOLO lấy được ra ảnh. cũng như các thư viện của openCV để cắt ảnh và cho ra kết quả ảnh bằn tesseract để cho ra văn bản text từ hình ảnh biển số. Mô hình áp dụng thực tế về xử lý nhận dạng biển số camera Ảnh  Cắt ảnh với openCV Độ chắc chắn Bounding YOLO box  Cắt ra ảnh biển sô chuyển ảnh xám Ảnh xám Cắt ra ảnh biển sô Bức ảnh Cắt ảnh với openCV Dùng tesseract cho text Kết quả chữ số Hình 3.7 Mô hình xử nhận dạng ảnh thực tế Đầu tiên ảnh đầu vào sẽ được cho vào sẽ được vào mô hình YOLO để tách ra các Bounding box (có tọa độ), sau đó ảnh sẽ được cắt với openCV để cho ra ảnh chỉ có biển số và chuyển ảnh đó về ảnh xám để xử lý, tiếp theo là cắt ra từng ký tự có trong ảnh và cuối cùng là dùng tesseract để nhận dạng chuyển ký tự chữ số về dạng text, quy trình này được thể hiện trên hình 3.6. Chụp ảnh đầu vào đưa vào raspberry xử lý Hình 3.8 Ảnh biển số xe đưa vào xử lý Sau khi raspberry chụp ảnh được từ camera ảnh sẽ được đưa vào xử bên trong khối xử lý trên raspberry để cắt được ra khung ảnh, ảnh có kích thước tùy ý do được xử lý bằng mô hình YOLO nhưng trong trường hợp này để cho việc giảm bớt số lượng ma trận xử lý, tăng tốc độ tính toán camera cho raspbery chọn ảnh có kích thước 448x640 để làm ảnh đầu vào xử lý, ảnh đầu vào xử lý được thể hiện trên hình 3.7. Cắt ảnh biển số có trong hình chụp ảnh biển số. Hình 3.9 Ảnh đã được cắt bằng mô hình YOLO Sau khi qua mô hình YOLO để xử lý cho ra được Bounding box và dùng thư viện openCV để cắt tấm ảnh chỉ chứa biển số theo các thông số YOLO đã đưa ra để giảm bớt dung lượng của ảnh giúp rễ dàng cho việc nhận dạng ra chữ số trong biển số ảnh đã được cắt bớt và kết quả được hiển thị như trên hình 3.8. Xử lý ảnh xám đầu vào Hình 3.10 Ảnh biển số xử lý về ảnh xám Do biển số xe được chụp lại sẽ có độ sáng không đồng đều giữa các vùng mà có thể bị chuyển từ sáng sang tối và ngược lại nên dùng tách ngưỡng có thể gây ra ảnh có những vùng đen thành trắng, trắng thành đen. Vì vậy, Chuyển ảnh về xám chúng ta cần chọn một ngưỡi thích hợp, ở trong hình trên mức tách đã chọn ngưỡng ảnh tách 100 để chuyển ảnh về anh xám giúp việc tìm ra các đường biên của ký tự trong ảnh một cách rễ dàng hơn, dùng thư thư viện openCV để chuyển ảnh về ảnh nhị phân như hình 3.9. tìm ra đường viền của các chữ số có trong anh Hình 3.11 Cắt ra các đường viền biển số Tìm ra các contours (đường viền) bao quanh các ký tự ta thu được các hình chữ có ảnh như hình 3.10, các chữ số tách ra riêng biệt để nhận dạng từng ký tự một cách riêng biệt. Kết quả nhận dạng ảnh biển số có trong hình Hình 3.12 Kết quả sau khi nhận dạng biển số Sau khi xử lý khoanh vùng được các ký tự có trong biển số và tách được từng ký tự biển số có trong hình 3.11, để cho ra text thư viên được sửa dụng là tesseract để nhận dạng cho ra văn bản text dựa vào các ảnh ký tự vừa có được trong hình 3.11. Tóm lại: Kết quả của chương 2 bao gồm các bước thiết kế mà yêu cầu ban đầu của hệ thống đề ra, các bước huấn luyện mạng lưới cho ra kết quả và kèm theo đó là kết quả đầu ra của từng bước đạt được KẾT LUẬN Thông qua quá trình tìm hiểu và làm thực tiễn để giải quết mục tiêu đề ra ban đầu của dự án đề ra là nhận dạng biển số xe và gửi chuỗi văn bản text lên cloud đề tài đã làm được bước đầu nhận dạng biển số và chụp được ảnh biển số với độ chính xác theo phương thẳng không có nhiễu là gần như hoàn toàn không có sai sót giúp giải quết phần khó nhất của nhiệm vụ đề ra. Bên cạnh những thành công bước đầu vẫn không thể tránh khỏi những hạn chế về nhiệm vụ định dạng giao thức truyền lên server và giao diện thiết kế còn chưa được đẹp mắt mà nguyên nhân chủ yếu do quá hạn chế về thời gian và đây cũng là một vấn đề mới hoàn toán đối với bản thân mỗi cá nhân sinh viên, em mong trong thời gian sắp tới có thể khắc phục tốt những mặt hạn chế để hoàn thành sản phẩm một cách toàn diện hơn. Hướng phát triển: Có thể nhận dạng biển số xe trên một số board mạch FPGA giúp tăng thời gian real-time hơn và nhận dạng được nhiều đối tượng hơn. Thiết kế thêm nguồn dự phòng bằng sửa dụng pin giúp triển khai trong những trường hợp mất điện. Kiến nghị và đề xuất Thực hiện phát triển thuật toán nhận dạng theo dõi hành vi người dùng trên các board FPGA gắn ở ngoài đường với thời gian thực bằng cách dùng các thuật toán YOLO Làm các thiết bị có thể thể gắn thiết bị tại các nút giao thông chụp ảnh người vi phạm luật giao thông. DANH MỤC TÀI LIỆU THAM KHẢO “Phần Mềm SPM-VT Kiểm Soát Xe Ra Vào Tự Động.” [Online]. Available: https://giaiphapcongnghe.com.vn/phan-mem-spmvt-kiem-soat-xe-ra- vao.html. [Accessed: 08-Jun-2019]. “OpenCV là gì và bạn có thể làm gì với nó?” [Online]. Available: https://techmaster.vn/posts/33943/opencv-va-cac-ung-dung-cua-no-hien-nay. [Accessed: 08-Jun-2019]. B. Recht and C. Re, “Beneath the valley of the noncommutative arithmetic- geometric mean inequality: conjectures, case-studies, and consequences,” Feb. 2012. VuHuuTiep, “Machine Learning cơ bản.” 2007. “Ứng dụng Convolutional Neural Network trong bài toán phân loại ảnh - Viblo.” [Online]. Available: https://viblo.asia/p/ung-dung-convolutional- neural-network-trong-bai-toan-phan-loai-anh- 4dbZNg8ylYM?fbclid=IwAR2Li69GS_wahRupZMBuvvi6HQHTRKWTclw 0JT_RqCLzKFK2Qmv9FQKeYdI#_convolution-1. [Accessed: 02-Apr-2019]. “Convolutional Neural Networks, Explained.” [Online]. Available: https://www.datascience.com/blog/convolutional-neural-network. [Accessed: 03-Jun-2019]. “CS231n Convolutional Neural Networks for Visual Recognition.” [Online]. Available: [Accessed: 03- Jun-2019]. “What is object detection? Introduction to YOLO algorithm - Appsilon Data Science | End­ to­ End Data Science Solutions.” [Online]. Available: https://appsilon.com/object-detection-yolo-algorithm/. [Accessed: 03-Jun- 2019]. “Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3.” [Online]. Available: https://medium.com/@jonathan_hui/real-time-object- detection-with-yolo-yolov2-28b1b93e2088. [Accessed: 03-Jun-2019]. “YOLO — You only look once, real time object detection explained.” [Online]. Available: https://towardsdatascience.com/yolo-you-only-look-once-real- time-object-detection-explained-492dc9230006. [Accessed: 04-Jun-2019]. “Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3.” [Online]. Available: https://medium.com/@jonathan_hui/real-time-object- detection-with-yolo-yolov2-28b1b93e2088. [Accessed: 04-Jun-2019]. M. Gjoreski and G. Zajkovski, “Optical character recognition applied on receipts printed in Macedonian Language,” no. August, 2014. “Xây dựng ứng dụng Client-Server với Socket trong Java - GP Coder (Lập trình Java).” [Online]. Available: https://gpcoder.com/3679-xay-dung-ung-dung- client-server-voi-socket-trong-java/. [Accessed: 01-Dec-2018].

Các file đính kèm theo tài liệu này:

  • docxdo_an_tram_gui_xe_tu_dong_nhan_dang_bien_so_nguoi_gui.docx