Nó cung cấp các công cụ để xử lý ảnh, phân tích hình ảnh, nhận dạng khuôn mặt và các đối tượng khác, cũng như thực hiện các tác vụ khác liên quan đến xử lý ảnh và video.. SimpleCV cũng h
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
BÁO CÁO MÔN HỌC
THỊ GIÁC MÁY TÍNH
Đề tài: Tìm hiểu và cài đặt SimpeCV
Giảng viên hướng dẫn: Trương Minh Đức
Nhóm 1:
Sinh viên thực hiện Mã sinh viên
Nguyễn Huy Quang B19DCDT176 Nguyễn Phan Huy Tân B19DCDT189
Hà Đức Mạnh B19DCDT137 Trần bảo Nam B19DCDT156
Lê Đình Thành Long B19DCDT133
Hà Nội, 2023
Trang 2LỜI NÓI ĐẦU
Lời đầu tiên chúng em xin gửi lời cảm ơn đến Học viện Công nghệ Bưu chính Viễn thông khi đã đưa môn học này vào chương trình giảng dạy Đặc biệt, nhóm em xin gửi lời cảm ơn đến thầy Dương Minh Đức đã dạy dỗ, rèn luyện và truyền đạt những kiến thức quý báu cho nhóm em cũng như các nhóm khác trong lớp trong suốt thời của môn học Trong lớp học của thầy, chúng em đã được tiếp thu thêm nhiều kiến thức bổ ích, học tập được tinh thần làm việc nghiêm túc, hiệu quả Đây thực sự là những điều rất cần thiết cho quá trình học tập và công tác sau này của chúng em
Thời lượng môn học không nhiều, mặc dù đã có cố gắng nhưng những hiểu biết
và kỹ năng về môn học này của em còn hạn chế Do đó, bài báo cáo của nhóm chúng em
có thể còn có những thiếu sót và những chỗ chưa chính xác, kính mong thầy xem xét và góp ý giúp bài báo cáo của nhóm chúng em được hoàn thiện hơn
Nhóm chúng em xin chân thành cảm ơn!
Hà Nội, ngày 22 tháng 4 năm 2023
Trang 3Mục lục
LỜI NÓI ĐẦU 1
Mục lục 2
I Simple CV là gì ? 3
II Lịch sử phát triển 4
III Ứng dụng của simpleCV 5
IV Ưu điểm 6
V Nhược điểm 7
IV Cài đặt SimpleCV 8
1 Cài SimpleCV trên Windows 8
2 Một số phần mềm hỗ trợ 10
3 Cách cài đặt SimpleCV trên ubuntu 11
V Hướng dẫn sử dụng simpleCV bằng 1 số ví dụ cơ bản 12
VI Ví dụ của nhóm về SimpleCV 13
Trang 4I Simple CV là gì ?
SimpleCV là một thư viện mã nguồn mở được viết bằng ngôn ngữ Python để xử lý ảnh và video Nó cung cấp các công cụ để xử lý ảnh, phân tích hình ảnh, nhận dạng khuôn mặt và các đối tượng khác, cũng như thực hiện các tác vụ khác liên quan đến xử
lý ảnh và video SimpleCV hỗ trợ cho nhiều dạng định dạng ảnh phổ biến như JPEG, PNG, BMP, GIF
Hình 1 : SimpleCV là gì?
SimpleCV được xây dựng trên nhiều thư viện mã nguồn mở khác, bao gồm
SOpenCV, Pygame, PIL (Pillow), numpy, và scipy Nó cung cấp một cách đơn giản để thực hiện các công việc xử lý ảnh phức tạp mà không cần nhiều kiến thức chuyên sâu về xử lý ảnh hay các thuật toán phức tạp
SimpleCV cũng hỗ trợ các thiết bị ngoại vi như máy ảnh và webcam để thực hiện các tác vụ xử lý trực tiếp trên hình ảnh từ các nguồn này Đây là một thư viện hữu ích cho các ứng dụng liên quan đến xử lý hình ảnh, nhận dạng đối tượng và thị giác máy tính
Trang 5Hình 2 : SimpleCV hỗ trợ rất nhiều các thiết bị ngoại vi
II Lịch sử phát triển
Simple CV (Computer Vision) là một phần của lĩnh vực trí tuệ nhân tạo (AI) và xử
lý ảnh số Nó liên quan đến việc sử dụng máy tính để nhận dạng, phân loại và hiểu các hình ảnh Simple CV đã được phát triển trong nhiều năm và có nguồn gốc từ các kỹ thuật
xử lý ảnh truyền thống, bao gồm việc sử dụng các mô hình toán học để xác định các đặc trưng của hình ảnh và phân loại chúng
Trong những năm gần đây, với sự phát triển của deep learning, simple CV đã được đẩy mạnh một cách đáng kể Deep learning là một phương pháp học máy trong đó các mô hình học tập được xây dựng trên nền tảng của các lớp thần kinh nhân tạo sâu Các mô hình này được huấn luyện để tự động học các đặc trưng từ dữ liệu huấn luyện và
sử dụng chúng để phân loại và dự đoán các đối tượng trong hình ảnh
Hình 3 : Lịch sử phát triển SimpleCV
Với sự phát triển của các mô hình deep learning như Convolutional Neural Networks (CNNs), simple CV đã trở nên đáng tin cậy hơn trong việc phân tích hình ảnh Các mô hình CNN có khả năng xử lý các hình ảnh lớn và phức tạp và cũng được sử dụng rộng rãi trong các ứng dụng như phân loại hình ảnh, nhận dạng khuôn mặt, nhận dạng chữ viết tay và nhiều ứng dụng khác
Trang 6III Ứng dụng của simpleCV
● Xử lý ảnh và video: SimpleCV cung cấp các công cụ để xử lý ảnh và video, cho phép người dùng thực hiện các tác vụ như chỉnh sửa, lọc và chuyển đổi hình ảnh
● Phân tích hình ảnh: SimpleCV cung cấp các công cụ để phân tích hình ảnh, cho phép người dùng tìm kiếm và phát hiện các đối tượng trong hình ảnh, đo kích thước, tính toán độ tương đồng và nhiều hơn nữa
Hình 4 : Phân tích hình ảnh
● Nhận dạng khuôn mặt và đối tượng: SimpleCV hỗ trợ nhận dạng khuôn mặt và các đối tượng khác trong hình ảnh, cho phép người dù
● ng phân tích và định vị các đối tượng cụ thể trong hình ảnh
Hình 5 : Nhận diện khuôn mặt
● Hỗ trợ các thiết bị ngoại vi: SimpleCV hỗ trợ các thiết bị ngoại vi như máy ảnh và webcam để thực hiện các tác vụ xử lý trực tiếp trên hình ảnh từ các nguồn này
Trang 7● Thực hiện các tác vụ liên quan đến thị giác máy tính: SimpleCV là một công cụ hữu ích cho các ứng dụng liên quan đến thị giác máy tính, bao gồm robot, xe tự hành và các ứng dụng y tế và an ninh
Hình 6 : Thị giác máy tính
IV Ưu điểm
● Đơn giản: Simple CV không yêu cầu nhiều kiến thức chuyên sâu về toán học hay lập trình, do đó có thể áp dụng được cho nhiều người và tình huống khác nhau
● Hiệu quả: Simple CV có thể đưa ra kết quả tốt với số lượng dữ liệu nhỏ Điều này
là do Simple CV có khả năng xử lý dữ liệu đơn giản và giảm thiểu overfitting
Hình 7 : Ưu điểm của SimpleCV
Trang 8● Thời gian đào tạo nhanh: Simple CV cung cấp các thuật toán đơn giản và hiệu quả
để đào tạo mô hình máy học Do đó, thời gian đào tạo mô hình tương đối nhanh
● Dễ hiểu: Simple CV cho phép các nhà phát triển dễ dàng hiểu và giải thích cách
mô hình hoạt động Điều này có thể giúp giảm thiểu sai sót và cải thiện hiệu quả của mô hình
● Tính di động: Simple CV có thể chạy trên nhiều thiết bị khác nhau, bao gồm cả các thiết bị có tài nguyên hạn chế như điện thoại thông minh
V Nhược điểm
● Tốc độ xử lý chậm: SimpleCV sử dụng Python làm ngôn ngữ chính, vì vậy tốc độ
xử lý của nó không nhanh bằng các thư viện thị giác máy tính khác được viết bằng C++ hoặc CUDA
Hình 8 : Nhược điểm của SimpleCV
● Không hỗ trợ GPU: SimpleCV không hỗ trợ tính toán trên GPU, điều này làm giảm hiệu năng xử lý của thư viện
● Không tối ưu cho ứng dụng thực tế: SimpleCV thường được sử dụng để giảng dạy
và nghiên cứu, không phải để triển khai các ứng dụng thực tế
Trang 9● Không có cập nhật thường xuyên: SimpleCV không được phát triển và cập nhật thường xuyên, do đó có thể không hỗ trợ được các tính năng mới nhất trong thị giác máy tính
VI Cài đặt SimpleCV
1 Cài SimpleCV trên Windows
SimpleCV là một thư viện Python, vì vậy trước tiên bạn cần phải cài đặt Python trên máy tính của mình Chú ý cài cần cài python 3.4-3.6 vì các phiên bản cao hơn đã không còn tương thích với SimpleCV
Download Python từ trang chủ: https://www.python.org/
Hình 9 : Các phiên bản của Python
Chọn phiên bản phù hợp với máy tính, sau đó chạy file cài đặt đã download
Trang 10Hình 10 : thêm biến môi trường cho python
Tại cửa sổ hiện lên, tick chọn Add Python 3.7 to PATH để Python được tự động thêm vào biến môi trường, sau đó bấm vào Install Now để bắt đầu cài đặt
Sau khi cài đặt hoàn tất, có thể kiểm tra python đã cài đặt thành công chưa bằng cách mở command line lên và chạy thử lệnh sau để kiểm tra
Nhập Lệnh: “Python”
Hình 11 : Cài dặt Python thành công
Tại cửa sổ nếu thấy thông báo tương tự tức là python đã được cài đặt thành công vào máy tính
Trang 112 Một số phần mềm hỗ trợ
Trong quá trình cài đặt SimpleCV, bạn có thể cần phải cài đặt các phần mềm hỗ trợ như OpenCV, Pygame và các thư viện liên quan khác Để cài đặt các phần mềm này, bạn có thể chạy các lệnh sau:
Hình 12: Cài dặt các thư viện hỗ trợ
Tại cửa sổ command thấy các dòng chữ này tức là đã cài thành công
Hình 13 : Cài dặt thành công các thư viện
Trang 12Cuối cùng chạy Chạy dòng lệnh pip install SimpleCV
Hình 14 : Cài dặt thành công SimpleCV
3 Cách cài đặt SimpleCV trên ubuntu
Mở terminal và cài python bằng dòng lệnh :
sudo apt-get install python3
Cài đặt các gói phụ trợ cho SimpleCV bằng lệnh :
sudo apt-get install python3-setuptools python3-pip python3-opencv libopencv-dev python3-numpy python3-scipy python3-matplotlib ipython3
Hình 15 : Cửa sổ màn hình khi cài đặt thành công
Trang 13Ta có thể kiểm tra lại đã cài đặt thành công chưa bằng lệnh
python3 (enter)
>>import SimpleCV
Hình 16 : Kiểm tra đã cái đặt thành công SimpleCV chưa VII Hướng dẫn sử dụng simpleCV bằng 1 số ví dụ cơ bản
● Import
Người dùng có thể import thư viện SimpleCV vào chương trình Python của mình bằng cách sử dụng lệnh import
import SimpleCV
● Đọc và hiển thị ảnh
Chúng ta có thể đọc ảnh từ file hoặc từ nguồn dữ liệu khác như camera, webcam… bằng cách sử dụng hàm Image() của SimpleCV Sau đó, có thể hiển thị ảnh bằng cách gọi phương thức show() trên đối tượng ảnh
from SimpleCV import Image
# Đọc ảnh từ file
img = Image("image.jpg")
# Hiển thị ảnh
img.show()
● Xử lí ảnh
Trang 14ảnh, tìm cạnh, phát hiện đối tượng, v.v Ví dụ dưới đây minh họa cách chuyển ảnh sang ảnh xám và tìm cạnh trong ảnh
from SimpleCV import Image
# Đọc ảnh từ file
img = Image("image.jpg")
# Chuyển ảnh sang ảnh xám
gray_img = img.grayscale()
# Tìm cạnh trong ảnh xám
edges_img = gray_img.edges()
# Hiển thị ảnh sau khi xử lý
edges_img.show()
● Lưu ảnh
Sau khi xử lý ảnh, người dùng có thể lưu ảnh vào file mới bằng cách gọi phương thức save() trên đối tượng ảnh và truyền vào đường dẫn của file mới
from SimpleCV import Image
# Đọc ảnh từ file
img = Image("image.jpg")
# Chuyển ảnh sang ảnh xám
gray_img = img.grayscale()
# Tìm cạnh trong ảnh xám
edges_img = gray_img.edges()
# Lưu ảnh đã xử lý vào file mới
edges_img.save("edges_image.jpg")
VIII Ví dụ của nhóm về SimpleCV
Trang 15import simplecv
import cv2
import numpy as np
import face_recognition
import os
from datetime import datetime
path = 'ImagesAttendance'
images = []
classNames = []
myList = os.listdir(path)
print(myList)
for cl in myList:
curImg = cv2.imread(f'{path}/{cl}')
images.append(curImg)
classNames.append(os.path.splitext(cl)[0])
print(classNames)
def findEncodings(images):
encodeList = []
for img in images:
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# kiểm tra xem ảnh đầu vào có chứa khuôn mặt hay không
faceLocs = face_recognition.face_locations(img)
if len(faceLocs) == 0:
continue
encode = face_recognition.face_encodings(img, faceLocs)[0]
encodeList.append(encode)
return encodeList
def markAttendance(name):
with open('Attendance.csv', 'r+') as f:
myDataList = f.readlines()
nameList = []
for line in myDataList:
entry = line.split(',')
nameList.append(entry[0])
if name not in nameList:
now = datetime.now()
dtString = now.strftime('%H:%M:%S')
f.write(f'\n{name},{dtString}')
encodeListKnown = findEncodings(images)
print('Encoding Complete')
cap = cv2.VideoCapture(0)
while True:
success, img = cap.read()
imgS = cv2.resize(img, (0, 0), None, 0.25, 0.25)
imgS = cv2.cvtColor(imgS, cv2.COLOR_BGR2RGB)
# tìm vị trí khuôn mặt trên khung hình hiện tại
facesCurFrame = face_recognition.face_locations(imgS)
# mã hóa các khuôn mặt tìm được
encodesCurFrame = face_recognition.face_encodings(imgS, facesCurFrame)
Trang 16# so sánh với danh sách các khuôn mặt đã biết
matches = face_recognition.compare_faces(encodeListKnown, encodeFace)
faceDis = face_recognition.face_distance(encodeListKnown, encodeFace)
# tìm khuôn mặt khớp gần nhất
matchIndex = np.argmin(faceDis)
if matches[matchIndex]:
name = classNames[matchIndex].upper()
# đánh dấu thời gian hiện tại nếu chưa đánh dấu cho tên này
markAttendance(name)
else:
name = 'Unknown'
# vẽ khung xung quanh khuôn mặt không nhận dạng được
y1, x2, y2, x1 = faceLoc
y1, x2, y2, x1 = y1*4, x2*4, y2*4, x1*4
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 0, 255), 2)
# vẽ tên cho khuôn mặt không nhận dạng được
cv2.rectangle(img, (x1, y2-35), (x2, y2), (0, 0, 255), cv2.FILLED)
cv2.putText(img, name, (x1+6, y2-6),
cv2.FONT_HERSHEY_COMPLEX, 1, (255, 255, 255), 2)
cv2.imshow('Webcam', img)
cv2.waitKey(1)