Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 29

TRƯỜNG ĐẠI HỌC PHENIKAA

KHOA ĐIỆN-ĐIỆN TỬ
⸎⸎⸎⸎⸎

BÀI BÁO CÁO


THỰC TẬP DOANH NGHIỆP BAN ĐẦU

Họ và tên: Nguyễn Việt Anh


Mã sinh viên: 20010659
Lớp : Kĩ Thuật Điều Khiển và Tự Động Hóa 1

HÀ NỘI, THÁNG 06/2023

1
Mục lục:

1. Nội dung tiếp cận.........................................................................................................3


1.1. Giớ i thiệu về mả ng AI.............................................................................................3
1.2. Chi tiết mảng AI đang sử dụng trong xe tự hành XBUS..........................................8
1.3. Dữ liệu trong AI, làm quen với kiểu dữ liệu ảnh 2D, point 3D..............................11
1.4. Hướng dẫn cài đặt Ubuntu, môi trường Anaconda, Source Code..........................11
2. Thư viện openCV........................................................................................................15
2.1 Giớ i thiệu về openCV...............................................................................................15
2.2 Các thành phần quan trọng của OpenCV..................................................................17
3. Giải bài tập................................................................................................................... 18
3.1 Bài tập số 1...............................................................................................................18
3.2 Bài tập số 2...............................................................................................................20
3.3 Bài tập số 4..................................................................................................................23
3.4 Bài tập số 5..................................................................................................................25
....

2
1. Nội dung tiếp cận
1.1Giới thiệu về mảng AI
1.1.11Khái niệm

Trí tuệ nhân tạo (Artificial Intelligence) là gì?


Trí tuệ nhân tạo (AI) đề cập đến việc mô phỏng trí thông minh của con người trong máy
móc được lập trình để suy nghĩ giống như con người và bắt chước hành động của họ.
Thuật ngữ này cũng có thể được áp dụng cho bất kỳ máy nào thể hiện các đặc điểm liên
quan đến trí óc con người như học tập và giải quyết vấn đề.
Đây là ngành tạo ra máy móc và hệ thống thông minh thông qua việc sử dụng mô hình
máy tính, kỹ thuật và công nghệ liên quan, giúp thực hiện các công việc yêu cầu trí
thông minh của con người. Nhìn chung, đây là một ngành học rất rộng, bao gồm các
yếu tố tâm lý học, khoa học máy tính và kỹ thuật. Một số ví dụ phổ biến về AI có thể kể
đến ô tô tự lái, phần mềm dịch thuật tự động, trợ lý ảo trên điện thoại hay đối thủ ảo khi
chơi trò chơi trên điện thoại.

1.1.2Các ứng dụng của AI về hiện tại có thể kể đến như

Trợ lý ảo (Virtual assistant)

Những ứng dụng cơ bản là các phần mềm như Amazon Alexa, Google Assistant, Siri,…
Nhiều phần mềm trợ lý ảo hiện đang được cài đặt trong điện thoại của chúng ra, nhằm
phục vụ tốt hơn.

Ứng dụng Internet

AI có nhiều ứng dụng hữu ích trong các công nghệ liên quan đến Internet, chẳng hạn
như tiếp thị kỹ thuật số (digital marketing), tạo và tạo nội dung trực tuyến, quảng cáo kỹ
thuật số (digital advertising), tìm kiếm trên web, thiết kế Web, chatbot, Internet of
Things (IoT) và các ứng dụng khác.

Tiếp thị kỹ thuật số (Digial Marketing)

Lĩnh vực này đã cách mạng hóa các công ty hiện đại. Trong khi lượng thông tin về
người tiêu dùng tiềm năng tăng lên, công nghệ liên quan đến AI sẽ có tầm quan trọng
cao nhất khi đưa ra quyết định dựa trên dữ liệu. AI giúp tìm người và khách hàng dựa
trên sở thích, nhân khẩu học và các khía cạnh khác của họ để tìm hiểu và phát hiện đối
tượng tốt nhất cho các thương hiệu cụ thể.

3
Sáng tạo nội dung (Content creation)

Có những lĩnh vực mà nội dung được tạo bởi AI có thể hữu ích và giúp thu hút khách
truy cập vào một trang web. AI cũng có thể viết báo cáo và tin tức dựa trên dữ liệu và
thông tin. Hàng trăm bài viết có thể được tạo ra với công nghệ AI một cách nhanh
chóng, có thể tiết kiệm rất nhiều thời gian và tài nguyên.

Tìm kiếm trực tuyến

Những cách thức cũ để thực hiện tìm kiếm trực tuyến không còn đúng nữa. Hai trường
hợp sử dụng mà sử dụng AI đã cách mạng hóa các tìm kiếm trên Internet và tối ưu hóa
công cụ tìm kiếm (SEO) là tìm kiếm bằng giọng nói và thuật toán Google, được gọi là
RankBrain. Những điều này đã thay đổi cách các nhà tiếp thị tạo ra và tối ưu hóa nội
dung Web của họ.

Thiết kế web

Với AI, các trang web có thể tồn tại mà không cần sự trợ giúp của các lập trình viên và
nhà thiết kế. Các ứng dụng, chẳng hạn như Grid, sử dụng AI để thiết kế trang web dựa
trên thông tin được cung cấp bởi người dùng như hình ảnh, văn bản, kêu gọi hành động,
v.v … AI có thể khiến các trang web trông chuyên nghiệp trong thời gian rất ngắn và
chi phí thấp hơn nhiều.

Chatbot

Người tiêu dùng đã sử dụng chatbot để trò chuyện với bạn bè và đồng nghiệp mà không
phải chờ đợi lâu để nhận được phản hồi. Chatbot tự động hóa các câu trả lời cho người
mua tiềm năng. Câu hỏi thường gặp và cung cấp cho họ cách tìm kiếm sản phẩm hoặc
dịch vụ mà họ đang tìm kiếm.

Các kỹ thuật xử lý học tập tự nhiên và máy học được các bot này sử dụng để tìm ra câu
trả lời chính xác. Nhiều thương hiệu đã bắt đầu sử dụng các kỹ thuật này để liên lạc với
khách hàng tiềm năng của mình thông qua các ứng dụng nhắn tin như Facebook
Messenger, WhatsApp và Slack.

An ninh mạng

Mối quan tâm chính trong thế giới kỹ thuật số ngày nay là an ninh mạng. Các cuộc tấn
công phần mềm độc hại và vi-rút là phổ biến trong thế giới mạng. Có một mối đe dọa
liên tục về bảo mật dữ liệu đối với không chỉ các cá nhân hoặc doanh nghiệp mà cả các
4
khu vực chính phủ. AI cùng với học máy được sử dụng để bảo vệ dữ liệu. AI cho phép
tự động hóa việc phát hiện mối đe dọa và chiến đấu mà không cần sự tham gia của con
người. AI đã được sử dụng để bảo vệ mật khẩu và phát hiện xác thực.

IoT

AI được sử dụng để quản lý các luồng dữ liệu khổng lồ và lưu trữ trong mạng IoT. Với
mạng Internet tốc độ cao và các cảm biến tiên tiến được tích hợp vào bộ vi điều khiển
(MCU), AI cùng với IoT đang tạo ra một làn sóng công nghệ đột phá mới.

Với sự bùng nổ của IoT, có những vấn đề liên quan đến lưu trữ dữ liệu, độ trễ, giới hạn
kênh và tắc nghẽn trong mạng. Một giải pháp để giải quyết những vấn đề này là sử dụng
AI trong khai thác dữ liệu, quản lý và kiểm soát tắc nghẽn trong mạng. Các kỹ thuật đợc
sử dụng trong AI bao gồm logic mờ và mạng nơ-ron kết hợp với mạng IoT.

Tài chính và kinh tế

Phố Wall, khu tài chính của Mỹ, sử dụng các chương trình máy tính phức tạp để làm
những công việc nặng nhọc. Các chương trình này tự chạy. Vài năm trước, thị trường
chứng khoán lao dốc, lấy đi giá trị thị trường trị giá hàng nghìn tỷ đô la, do chương trình
ANI gặp trục trặc.

Một ví dụ khác, chẳng hạn, khi bạn gửi séc bằng ứng dụng trên di động của mình, nó sẽ
chạy qua một hệ thống ANI tinh chỉnh có thể đọc séc nhanh hơn nhiều so với con
người. Khi bạn mua sắm trực tuyến, về cơ bản, bạn đang cung cấp dữ liệu vào các hệ
thống ANI.

Nghệ thuật và thiết kế

AI đã được sử dụng để tạo ra các đối tượng thuật toán có thể được hiển thị bằng kỹ
thuật số. Nó có thể tạo ra các mẫu mới với tốc độ cao, hiệu quả tốt và tính chân thực.
Các công cụ thiết kế dựa trên thuật toán giúp bạn xây dựng giao diện người dùng, nội
dung và cá nhân hóa trải nghiệm người dùng.

Các công cụ xuất bản như Readymag và Squarespace đã đơn giản hóa rất nhiều công
việc đến mức bạn có thể nhận được nhiều mẫu và thiết kế chất lượng cao mà không phải
trả tiền cho nhà thiết kế. Có nhiều công cụ thiết kế dựa trên thuật toán khác để thiết kế
đồ họa bao gồm nhận dạng, bản vẽ và minh họa.

Các nhà cung cấp giải pháp AI cung cấp các công cụ và thư viện để thao tác với hình
ảnh. Trong tương lai gần, AI sẽ thúc đẩy thế hệ ứng dụng tiếp theo cho nghệ thuật thị
giác và thiết kế sáng tạo.
5
Một mô hình AI, được gọi là CRAFT (Composition, Retrieval and Fusion Network),
đang được phát triển bởi các nhà nghiên cứu từ Đại học Illinois và học viện trí tuệ nhân
tạo Allen của Mỹ. Nó có thể chuyển đổi các mô tả văn bản được cung cấp thành các
video clip của một bộ phim hoạt hình. Để đơn giản hóa, AI khớp các video với các mô
tả từ, xây dựng một bộ thông số và tạo cảnh.

Thăm dò và nghiên cứu

Cơ quan phụ trách các dự án nghiên cứu cao cấp về quốc phòng (DARPA) của Hoa Kỳ,
đang nghiên cứu chương trình khám phá trí tuệ nhân tạo (AIE), một thành phần quan
trọng của cơ quan AI rộng hơn.

AI trong thám hiểm không gian cũng đang thu thập động lực. Trong vài năm tới, các
nhiệm vụ mới sẽ được AI tiếp nhận khi con người tiến hành thám hiểm mặt trăng và các
hành tinh khác. AI cũng đang được sử dụng trong nhiệm vụ khám phá hành tinh sao
Hỏa tiếp theo của NASA.

Hiệp hội địa lý quốc gia (National Geographic Society) và Microsoft đang hợp tác để
tìm ra cách làm thế nào AI có thể giúp chúng ta hiểu, tham gia và bảo vệ trái đất.

AI đang giúp ngành công nghiệp dầu khí bảo tồn hệ sinh thái trong khi khám phá các tài
nguyên mới.

Robotic và AI đã và đang thay thế các phương pháp nghiên cứu và khám phá truyền
thống trong khoa học và công nghệ đại dương.

Giáo dục

AI đang được sử dụng để cải thiện hệ thống giáo dục. Các kỹ thuật truyền thống có thể
được thay thế bằng cách học thích ứng, cá nhân hóa để điều chỉnh điểm mạnh và điểm
yếu của từng học sinh. Học máy có thể được sử dụng để xác định sinh viên và tập trung
các nguồn lực bổ sung vào những người yếu hơn.

Các robo đọc sách dựa trên trí tuệ nhân tạo đang được sử dụng trong việc đánh giá tiểu
luận của sinh viên trong trường học. Cách tiếp cận này liên quan đến việc kết hợp trí
thông minh của con người với AI để cải thiện hệ thống phân loại tổng thể và giúp học
sinh hoàn thành việc học được tốt hơn.

Kỹ thuật Ô tô

6
Công nghệ ô tô hỗ trợ ANI đang được sử dụng trong những chiếc xe không người lái.
Gần đây, IBM đã phát triển một IoT cho ô tô – một chương trình để loại bỏ các lỗi của
tài xế thông qua kết nối. Bở vì nhiều tai nạn xảy ra là do lỗi của con người, các nhà
nghiên cứu đang cố gắng tìm cách giảm thiểu lỗi của con người bằng thuật toán AI.

Trong tương lai, chiếc xe của bạn có thể sẽ được tích hợp các chương trình máy tính
phức tạp. Một chiếc xe tự động sử dụng AI, cảm biến và hệ thống định vị toàn cầu để tự
lái mà không cần người điều khiển.

Trò chơi điện tử

Bạn có thể đã biết về Deep Blue, siêu máy tính chơi cờ vua IBM, đã đánh bại đại kiện
tướng quốc tế Garry Kasparov vào cuối những năm 1990.

Chinook, một chương trình được phát triển tại Đại học Alberta, Canada, có thể đánh bại
bất kỳ người chơi nào của con người trong trò chơi cờ đam. Ngoài ra còn có một
chương trình máy tính được gọi là Maven cho trò chơi scrabble. Đây là những ví dụ
hoàn hảo về AI.

Gần đây, AlphaZero, một ANI được phát triển bởi DeepMind, đã giành chiến thắng 100
trận liên tiếp trước chương trình cờ vua hay nhất thế giới hiện tại.

Hầu như mọi trò chơi video hiện đại đều có thành phần AI. Các đánh giá trò chơi video
dựa trên chất lượng của AI.

Chăm sóc sức khỏe

Một loại thuật toán AI mới đang được Google sử dụng là Medical Brain để đưa ra dự
đoán về khả năng tử vong ở bệnh nhân. Công nghệ này là nỗ lực mới nhất để cách mạng
hóa chăm sóc sức khỏe. Các chương trình AI đang được phát triển và sử dụng trong
chẩn đoán, điều trị, phát triển thuốc và theo dõi và chăm sóc bệnh nhân.

Ngày nay, hầu hết các bác sĩ sử dụng các chương trình ANI. Chúng giúp các bác sĩ chẩn
đoán chính xác ung thư và các bệnh khác. Tiếp theo đó, sẽ có một nhà hóa học robot sử
dụng máy học để nghiên cứu các phân tử và phản ứng mới.

Quân sự

AI và robot đang cho phép các khả năng và chiến lược quân sự mới bao gồm tình báo,
giám sát và thậm chí là các hệ thống vũ khí hạt nhân. AI được sử dụng trong vũ khí tự
động và hệ thống cảm biến.

7
Có rất nhiều nghiên cứu và phát triển AI quân sự đang diễn ra trên khắp thế giới nhờ sự
tiến bộ nhanh chóng trong lĩnh vực học máy.

1.2Chi tiết mảng AI đang sử dụng trong xe tự hành XBUS

Xe tự hành - Công nghệ của tương lai

Thế giới ngày càng phát triển, ngày càng có nhiều những phát kiến công nghệ mới giúp
giải phóng sức lao động, giải phóng thời gian, giúp con người có một cuộc sống thoải
mái hơn. Xe tự hành của chúng tôi với những công nghệ nổi bật :

4 Cấp độ 4/5 thang cấp độ tự hành

5 Dừng, tránh vật cản thông minh

6 Cập nhật bản đồ mới nhất

7 Thân thiện, dễ dàng sử dụng

Công nghệ cảm biến vượt trội

8
9
Các loại Sensors:

 LIDAR: LIght Detection and Ranging


 GNSS: Global Navigation Satellite System
 IMU: Inertial Measurement Unit
 CAMERA
 RADAR: RAdio Detection and Ranging
 SONAR: SOund NAvigation and Ranging.

AI ở trong xe XBUS:

 Đếm số lượng người đứng, ngồi trong xe,


kiểm tra số lượng ghế còn trống.
 Khi xe di chuyển, nếu có hiện tượng bất
thường → cảnh báo.
 Tăng tính trải nghiệm người dùng

AI ở ngoài xe XBUS:

10
 Xác định vùng đi được của xe (Ground,
Vegetation, Building).
 Xác định vị trí chính xác của các object
2D/3D, quỹ đạo di chuyển, vận tốc di
chuyển
1.3.Dữ liệu trong AI, làm quen với kiểu dữ liệu ảnh 2D, point

3D Một số kiểu dữ liệu thường được phân tích:

 Text, and numeric


 Categorical Data: labels, colors, genders, …
 Image
 Audio
 video
 Time series data (stock prices, weather, sensor readings…)
1.4.Hướng dẫn cài đặt Ubuntu, môi trường Anaconda, Source Code

Tại sao nên dùng Ubuntu:

 -Mã nguồn mở, hoàn toàn miễn phí


 -Hỗ trợ hầu hết các ngôn ngữ lập trình, thao tác command line rất tiện lợi so với
windows
 -Tốn ít tài nguyên phần cứng khi sử dụng
 -Tính bảo mật cao, ít bị dòm ngó bởi hacker

Tại sao nên dùng Anaconda:

 Mã nguồn mở, hoàn toàn miễn phí , được rất nhiều lập trình viên ưa chuộng vì
tính tiện lợi
 Đơn giản hóa việc quản lý và triển khai code
 Hoạt động trên đa nền tảng (Windows, Linux, MacOS)

Những thứ đã học được

11
 Hiểu thêm những kiến thức về mảng AI, học được cách làm những ví dụ cơ bản
về AI theo các Step cơ bản.
 Học được về các loại sensor được sử dụng trong xe tự hành và hiểu thêm về chức
năng của từng sensor.
 -Học được về các kiểu dữ liệu ảnh 2D,3D
 -Biết cách cài đặt hệ điều ảnh Ubuntu và Anacode để phục vụ cho môn học.

Những việc đã làm được sau 2 buổi đầu thực tập

a) Cài đặt được hệ điều hành ubuntu cho laptop


Em cài phần mềm ubuntu trên laptop bằng phần mềm ảo VirtualBox

Hình 1: giao diện phần mềm VirtualBox

Sau đó em sẽ chạy Ubuntu ảo trên VirtualBox.

12
Hình 2: hình ảnh của hệ điều hành Ubuntu bản 18.04
b) Cài phần mềm Anaconda
Sau khi đã cài xong Ubuntu thì em sẽ tiếp tục cài phần mềm Anaconda. 1 phần
mềm hỗ trợ việc viết code.

Hình 3: giao diện phần mềm anaconda

Anaconda là một phần mềm có môi trường phát triển tích hợp (Integrated
Development Environment - IDE) được sử dụng phổ biến trong lĩnh vực khoa học
13
dữ liệu và phân tích số liệu. Nó cung cấp một bộ công cụ và thư viện mạnh
mẽ cho việc phân tích dữ liệu, tính toán số học, và xây dựng ứng dụng.

Anaconda chứa một phiên bản Python, các trình biên dịch và công cụ hỗ trợ,
cũng như một số thư viện phổ biến như NumPy, Pandas, Matplotlib và SciPy.
Nó cũng bao gồm môi trường quản lý gói (package management system)
conda, giúp người dùng dễ dàng cài đặt và quản lý các gói và môi trường ảo
(virtual environments) trong Python.
Tải SUSTechPOINTS

14
Trong SUSTechPOINTS bao gồm các file và sau đó tiến hành tải
requirement.txt như trong ảnh dưới đây:

2.Thư viện openCV


2.1Giới thiệu về openCV

OpenCV (Open Source Computer Vision Library) là một thư viện mã nguồn mở
chuyên về xử lý ảnh và thị giác máy tính. Nó cung cấp một tập hợp các công cụ và
hàm để xử lý, phân tích và trích xuất thông tin từ ảnh và video.

OpenCV có thể được sử dụng trong nhiều ứng dụng khác nhau, bao gồm:

 Xử lý ảnh và video: OpenCV cung cấp các thuật toán và công cụ để thực hiện các
thao tác như cắt, xoay, thay đổi kích thước ảnh, lọc ảnh, giảm nhiễu, cân bằng sáng,
phát hiện cạnh, phát hiện vật thể, và theo dõi vật thể trong video.
 Phân tích và nhận dạng: OpenCV hỗ trợ các thuật toán để nhận dạng khuôn mặt,
phát hiện đối tượng, nhận dạng biển số xe, phân tích màu sắc và hình dạng, và rất

15
nhiều công cụ khác để trích xuất thông tin từ ảnh và video.
 Xử lý thị giác máy tính: OpenCV có thể được sử dụng để phát hiện và theo dõi
đối tượng, phát hiện và đo khoảng cách, xác định đường đi, và thực hiện nhiều tác
vụ khác liên quan đến thị giác máy tính và robotica.

OpenCV được viết bằng C++ và hỗ trợ các ngôn ngữ khác nhau như Python, Java
và C#. Thư viện này đã trở thành một công cụ quan trọng trong cộng đồng phát
triển ứng dụng xử lý ảnh và thị giác máy tính, với khả năng mở rộng và tương thích
trên nhiều nền tảng và hệ điều hành.

16
2.2Các thành phần quan trọng của OpenCV
Các thành phần chính trong thư viện OpenCV bao gồm:
 Core: Core module cung cấp các cấu trúc dữ liệu cơ bản trong OpenCV như
mảng (array) và ma trận (matrix), các hàm xử lý mảng, quản lý bộ nhớ, và các hàm
toán học cơ bản.
 Image Processing: Module Image Processing cung cấp các thuật toán và hàm xử
lý ảnh cơ bản như lọc ảnh, biến đổi hình học, biến đổi màu sắc, cân bằng sáng,
chuyển đổi không gian màu, phát hiện cạnh, trích xuất đặc trưng, và biến đổi
Fourier.
 Video I/O: Module Video I/O hỗ trợ đọc và ghi video từ các nguồn dữ liệu như
camera và tệp video. Nó cung cấp các lớp và hàm để xử lý video frame-by-frame,
trích xuất và ghi video với các định dạng khác nhau.
 Object Detection: Module Object Detection chứa các thuật toán và hàm để phát
hiện đối tượng trong ảnh và video. Nó bao gồm các phương pháp như phát hiện
khuôn mặt (Face Detection), phát hiện đối tượng (Object Detection), phát hiện biển
số xe (License Plate Detection) và nhiều thuật toán khác.
 Machine Learning: Module Machine Learning bao gồm các thuật toán học máy
cơ bản và công cụ hỗ trợ. Nó cung cấp các lớp và hàm để huấn luyện và sử dụng các
mô hình học máy như phân loại (classification), nhận dạng (recognition), và gom
cụm (clustering).
 GUI: Module GUI cung cấp các công cụ đồ họa và giao diện người dùng. Nó cho
phép hiển thị và xử lý hình ảnh, video, và các thành phần đồ họa khác trên các cửa
sổ (windows), điều khiển (controls), và bảng điều khiển (panels).
 Feature Detection and Description: Module Feature Detection and Description
chứa các thuật toán và hàm để phát hiện và mô tả các đặc trưng trong ảnh, như điểm
đặc trưng (keypoints) và mô tả (descriptors). Điều này rất hữu ích trong các ứng
dụng như nhận dạng vật thể, đo khoảng cách, và ghép ảnh.
 Camera Calibration and 3D Reconstruction: Module Camera Calibration and 3D
Reconstruction cung cấp các công cụ để hi kalib hóa máy ảnh và tái tạo 3D từ ảnh
17
và video. Nó bao gồm các thuật toán để ước tính ma trận calib hóa, định vị các điểm
điều chỉnh (control points), và xây dựng mô hình 3D từ các ảnh chụp.
 Machine Learning (ml): Module Machine Learning cung cấp một tập hợp các
thuật toán học máy, bao gồm các thuật toán phân loại, hồi quy, gom cụm, và giảm
chiều dữ liệu. Nó cung cấp các công cụ để huấn luyện và sử dụng các mô hình học
máy trên dữ liệu ảnh và video.
 Media I/O: Module High-Level GUI and Media I/O cung cấp các công cụ cao
cấp hơn cho giao diện người dùng và đọc/ghi các định dạng phương tiện như ảnh và
video. Nó bao gồm các lớp và hàm để tạo và quản lý các cửa sổ, điều khiển, và bảng
điều khiển, cũng như các chức năng để đọc và ghi ảnh và video với định dạng phổ
biến.

Các module trong OpenCV cung cấp một loạt các công cụ và thuật toán mạnh mẽ
để xử lý ảnh, video và thị giác máy tính, cho phép nhà phát triển thực hiện các
nhiệm vụ phức tạp như nhận dạng đối tượng, theo dõi vật thể, xử lý ảnh y tế, và
nhiều ứng dụng khác.

3.Giải bài tập


3.1 Bài tập số 1
Code:

import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread("/content/sample_data/hinh1.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
edges = cv2.Canny(blurred, 50, 150)
contours, _ = cv2.findContours(edges.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)

18
rectangle_count = 0
for contour in contours:
perimeter = cv2.arcLength(contour, True)
approx = cv2.approxPolyDP(contour, 0.04 * perimeter, True)
if len(approx) == 4:
rectangle_count += 1
area = cv2.contourArea(approx)
cv2.drawContours(img, [approx], -1, (0, 255, 0), 2)
cv2.putText(img, f"Diện tích: {area}", (approx[0][0][0], approx[0][0][1] - 10),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
M = cv2.moments(approx)
cX = int(M["m10"] / M["m00"])
cY = int(M["m01"] / M["m00"])
cv2.drawContours(img, [approx], -1, (0, 255, 0), 2)
cv2.circle(img, (cX, cY), 4, (0, 255, 0), -1)
cv2.putText(img, f"Tâm: ({cX}, {cY})", (cX - 50, cY - 20),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.title(f"Số hình chữ nhật: {rectangle_count}")
plt.axis('off')
plt.show()

19
Kết quả:

3.2.Bài tập số 2
Các yêu cầu đã thực hiện được:
 Tạo 1 bức ảnh 500x500 pixel màu xám
 Vẽ đường chéo chính, màu đỏ, lan rộng ra 30 pixel (không
được sử dụng line để vẽ, phải truy xuất từng pixel)
 Vẽ 1 hình tròn full màu vàng randomly, bán kính 50 pixel
Code

Phân tích code:


import numpy as np
import cv2
from google.colab.patches import cv2_imshow

# Tạo ảnh màu xám


img = np.full((500,500,3),128, np.uint8)

# Draw a diagonal red line with thickness of 30 px


cv2.line(img,(0,0),(500,500),(0,0,255),30)

# Tạo hình tròn full màu vàng, tọa độ tâm randomly và bán kính 50 px
cv2.circle(img,(393,83), 50, (0,255,255), -1)

cv2_imshow(img)
20
Trước hết, khai báo 3 thư viện cần thiết:

import numpy as np
import cv2
from google.colab.patches import cv2_imshow
Tạo ảnh màu xám kích thước 500x500 px:

img = np.full((500,500,3),128, np.uint8)


(số 128 là chỉ màu xám trong giải màu RGB, số 3 là ảnh tạo ra có 3 chanel)

Vẽ đường chéo chính, màu đỏ, lan rộng ra 30 pixel:

cv2.line(img,(0,0),(500,500),(0,0,255),30)
( 2 bộ số (0,0) và (500,500) là 2 tọa độ đầu và cuối của đoạn thằng cần vẽ,
(0,0,255) là để hiển thị màu đỏ được tham khảo trong biểu đồ mã màu RGB, 30
là độ rộng 30 px của đoạn thẳng)

21
Vẽ 1 hình tròn full màu vàng randomly, bán kính 50 pixel:

cv2.circle(img,(393,83), 50, (0,255,255), -1)


(cặp số (393,83) là tọa độ lấy ngẫu nhiên của tâm đường tròn, 50 là bán kính
50px của hình tròn, (0,255,255) để hiển thị màu vàng, đối số -1 để tô full màu
vào hình tròn)

Cuối cùng show kết quả ảnh:

cv2_imshow(img)

22
Kết quả:

3.3.Bài số 4
Code
import cv2
import numpy as np

# Đọc ảnh đầu vào


image_paths = ["4_1.png", "4_2.png", "4_3.png"]
output_image_paths = ["4_1_out.png", "4_2_out.png", "4_3_out.png"]

for i in range(len(image_paths)):
# Đọc ảnh đầu vào
image = cv2.imread(image_paths[i])

# Chuyển đổi sang các không gian màu HSV, LAB và Ycxcy
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lab_image = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)
ycrcb_image = cv2.cvtColor(image, cv2.COLOR_BGR2YCrCb)
23
# Tìm ngưỡng màu để tách bông hoa và cây hoa
lower_red = np.array([0, 50, 50])
upper_red = np.array([10, 255, 255])
mask_hsv = cv2.inRange(hsv_image, lower_red, upper_red)

lower_red_lab = np.array([0, 128, 128])


upper_red_lab = np.array([10, 255, 255])
mask_lab = cv2.inRange(lab_image, lower_red_lab, upper_red_lab)

lower_red_ycrcb = np.array([0, 135, 85])


upper_red_ycrcb = np.array([255, 180, 135])
mask_ycrcb = cv2.inRange(ycrcb_image, lower_red_ycrcb, upper_red_ycrcb)

# Kết hợp các mask lại với nhau


combined_mask = cv2.bitwise_or(mask_hsv, cv2.bitwise_or(mask_lab, mask_ycrcb))

# Áp dụng mask lên ảnh gốc để tách bông hoa và cây hoa
flower_only = cv2.bitwise_and(image, image, mask=combined_mask)

# Tạo một ảnh mới với nền màu đỏ


red_background = np.ones_like(image) * (0, 0, 255)
red_background = cv2.bitwise_and(red_background, red_background,
mask=cv2.bitwise_not(combined_mask))

# Ghép ảnh bông hoa và cây hoa với ảnh mới có nền màu đỏ
final_image = cv2.bitwise_or(flower_only, red_background)

# Lưu ảnh đầu ra


cv2.imwrite(output_image_paths[i], final_image)
Giải thích
 Đọc ảnh đầu vào từ các đường dẫn được cung cấp và đặt đường dẫn cho ảnh đầu ra.
 Vòng lặp for được sử dụng để thực hiện quá trình xử lý cho từng ảnh.
 Đọc ảnh đầu vào bằng cv2.imread().
 Chuyển đổi ảnh từ không gian màu BGR sang các không gian màu HSV, LAB và Ycxcy
bằng cv2.cvtColor().
 Xác định ngưỡng màu để tách bông hoa và cây hoa trong từng không gian màu.
 Sử dụng cv2.inRange() để tạo mask cho mỗi không gian màu.
 Kết hợp các mask lại với nhau bằng cv2.bitwise_or() để tạo mask kết hợp.
 Áp dụng mask lên ảnh gốc bằng cv2.bitwise_and() để tách bông hoa và cây hoa.
 Tạo một ảnh mới có nền màu đỏ bằng cách tạo một ma trận có kích thước giống với ảnh gốc
và giá trị màu là (0, 0, 255) (đỏ).
 Sử dụng cv2.bitwise_and() và cv2.bitwise_not() để tạo mask đảo ngược của mask kết hợp
24
và áp dụng lên ảnh mới với nền màu đỏ.
 Ghép ảnh bông hoa và cây hoa vào ảnh mới có nền màu đỏ bằng cv2.bitwise_or().
 Lưu ảnh đầu ra bằng cv2.imwrite().
Kết quả

3.4 Bài số 5
import cv2

# Đọc ảnh từ file

image_path = "/content/sample_data/dongxu.png"

image = cv2.imread(image_path)

# Chuyển đổi sang ảnh grayscale

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Phát hiện các cạnh trong ảnh

edges = cv2.Canny(gray, 50, 150)

# Tìm các đường tròn trong ảnh

circles = cv2.HoughCircles(edges, cv2.HOUGH_GRADIENT, dp=1,


minDist=50,param1=100, param2=30, minRadius=10, maxRadius=50)
# Kiểm tra nếu tìm thấy ít nhất một đồng xu

25
if circles is not None:

# Chuyển đổi tọa độ và bán kính từ float sang integer

circles = np.round(circles[0, :]).astype("int")

# Vẽ biên và số lượng đồng xu

for (x, y, r) in circles:

26
cv2.circle(image, (x, y), r, (0, 255, 0), 4)

cv2.putText(image, str(len(circles)), (10, 30),


cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 2)

# Hiển thị ảnh kết quả

plt.imshow(cv2.cvtColor(image,

cv2.COLOR_BGR2RGB)) plt.axis("off")

plt.show()

# Lưu ảnh kết quả thành một file mới

output_path = "/content/sample_data/5_3_out.jpg"

cv2.imwrite(output_path, image)

print("Đã lưu ảnh kết quả thành

công.") # In ra số lượng đồng xu

print("Số lượng đồng xu:",

len(circles)) else:

print("Không tìm thấy đồng xu trong ảnh.")

Kết quả

27
Giải thích code
 Dòng 6: Đọc ảnh từ đường dẫn image_path bằng cv2.imread().
 Dòng 9: Chuyển đổi ảnh sang ảnh grayscale bằng cv2.cvtColor().
 Dòng 12: Sử dụng phép biến đổi Canny để phát hiện các cạnh trong ảnh.
 Dòng 15-23: Sử dụng cv2.HoughCircles() để tìm các đường tròn trong ảnh dựa
trên cạnh đã được phát hiện. Các tham số như dp, minDist, param1, param2,
minRadius, maxRadius được điều chỉnh để phù hợp với ảnh đầu vào và đồng
xu.
 Dòng 27-30: Nếu tìm thấy ít nhất một đồng xu, thì vẽ biên và số lượng đồng xu
trên ảnh gốc bằng cv2.circle() và cv2.putText().
 Dòng 34-38: Hiển thị ảnh kết quả bằng plt.imshow().
 Dòng 41-43: Lưu ảnh kết quả vào đường dẫn output_path bằng cv2.imwrite().
 Dòng 45-47: In ra số lượng đồng xu được tìm thấy hoặc thông báo nếu không
tìm thấy đồng xu trong ảnh.
 Mã trên sử dụng thư viện OpenCV và matplotlib để đọc, xử lý và hiển thị ảnh.
Nó tìm kiếm các đường tròn trong ảnh và đếm số lượng đồng xu dựa trên các
đường tròn được tìm thấy. Ảnh kết quả được hiển thị và lưu lại trong đường
dẫn output_path.

28
29

You might also like