Computer Vision จะเกี่ยวกับการสร้างแบบจำลองและการจำลองการมองเห็นของมนุษย์โดยใช้ซอฟต์แวร์และฮาร์ดแวร์คอมพิวเตอร์ วันนี้เราจะพาไป เรียนรู้รายละเอียดเกี่ยวกับเรื่องนี้
- ทำความเข้าใจฉาก 3 มิติจากภาพ 2 มิติ ของโครงสร้างที่มีอยู่ในภาพ
Computer Vision Hierarchy
- Low-level vision − การประมวณภาพ การแยกคุณลักษณะของภาพ
- Intermediate-level vision − จะรวมถึง การจดจำวัตถุ และการประมั่วผลภาพ 3 มิติ
- High-level vision − จะมีการอธิบาย แนวคิดของภาพ เช่น กิจกรรม ความตั้งใจ และพฤติกรรม
อย่างแรกเลยคือต้องติดตั้ง ไลบรารี ที่ชื่อว่า OpenCV (Open Source Computer Vision) เป็นไลบรารีของฟังก์ชั่นการเขียนโปรแกรมที่ ที่เกี่ยวกับ Computer Vision แบบเรียลไทม์เป็นหลัก
pip install opencv_python
สอนการอ่าน และ เขียนไฟล์ภาพ ด้วยฟังก์ชั่นของ OpenCV
imread()
คือ ฟังก์ชั่นสำหรับการอ่านไฟล์ภาพ
imshow()
คือ ฟังก์ชั่นสำหรับโชว์รูปภาพ ตัวรูปภาพจะมีขนาดเท่ากับ ไฟล์ต้นทาง
imwrite()
คือ ฟังก์ชั่นสำหรับเขียนหรือ สร้างไฟล์ภาพ
(รองรับสกุลไฟล์เช่น PNG, JPEG, JPG, TIFF เป็นต้น)
ตัวอย่าง
(ใช้ colab)
import numpy as np
import cv2 as cv
from google.colab.patches import cv2_imshow # for image display
from skimage import io
from PIL import Image
import matplotlib.pylab as plt
img = io.imread("/content/matty.jpg")
อ่านไฟล์
cv2_imshow(img)
แสดงผลภาพ
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/khvvpp187rr7h6iog8jl.png)
cv2.imwrite('save_newmatty.png'img)
จะทำการเขียนไฟล์ ขึ้นมาใหม่(เป็นสกุลไฟล์อื่นได้) โดยชื่อ save_newmatty
True
จะแสดงผล True เมื่อเขียนไฟล์สำเร็จ
Color Space Conversion
ใน OpenCV รูปภาพจะไม่ถูกจัดเก็บโดยใช้ค่าสีใน RGB ทั่วไป แต่ย้อนกลับแทน คือ BGR
cvtColor()
ฟังก์ชันการแปลงสี สำหรับการแปลงรูปภาพจากรหัสสีหนึ่งไปเป็นรหัสสีอื่น
ตัวอย่าง
import numpy as np
import cv2 as cv
from google.colab.patches import cv2_imshow # for image display
from skimage import io
from PIL import Image
import matplotlib.pylab as plt
ลงไลบรารี
img = cv2.imread("/content/matty.jpg")
img_new = cv.cvtColor(img,cv.COLOR_BGR2RGB)
final_frame = cv.hconcat((img, img_new))
cv2_imshow(final_frame)
จะเห็นว่าภาพแรกคือภาพ ค่าสี BGR ส่วนอีกภาพคือกลับเป็นRGB
img_gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
cv2_imshow(img_gray)
Edge Detection
หลังจากที่ได้เห็นภาพร่างคร่าวๆ แล้ว คนเราสามารถจดจำประเภทของวัตถุและท่าทางของพวกมันได้
นั่นเป็นเหตุผลที่ Edge(เส้นขอบ/ขอบ) มีบทบาทสำคัญกับการประยุกต์ใช้ ใน Computer Vision
OpenCV มีฟังก์ชันที่เรียบง่ายและมีประโยชน์ที่เรียกว่า Canny()
สำหรับการตรวจจับเส้นขอบ
ตัวอย่าง
import numpy as np
import cv2 as cv
from google.colab.patches import cv2_imshow # for image display
from skimage import io
from PIL import Image
import matplotlib.pylab as plt
ลงไลบรารี
cv2.imwrite('img_edge.jpg',cv2.Canny(img,200,300))
เขียนไฟล์ใหม่ ที่เป็นรูปแบบ edge
cv2_imshow(io.imread("/content/img_edge.jpg"))
Face Detection
การตรวจจับใบหน้าเป็นอีกหนึ่งเทคโนโลยี ที่น่าทึ่งของ Computer Vision ซึ่งตัว OpenCv จะมีฟังก์ชั้นในเรื่องของการตรวจจับใบหน้าอยู่ด้วย เรียกว่า Haar cascade classifier
Haar Cascade Data
เราต้องการ ข้อมูล data เพื่อใช้ Haar Cascade Classifier ไฟล์ cascade
จำเป็นที่จะต้องติดตั้งไฟล์ haarcascade_frontalface_default.xml
ตัวอย่าง
import cv2
import common
import numpy as np
%matplotlib inline
from matplotlib import pyplot as plt # this lets you draw inline pictures in the notebooks
import pylab # this allows you to control figure size
pylab.rcParams['figure.figsize'] = (10.0, 8.0)
ลงไลบรารี
base_image = cv2.imread('matty.jpg')
grey = cv2.cvtColor(base_image, cv2.COLOR_BGR2GRAY)
ลองเรียกรูปภาพ และ เปลี่ยนค่าสี
test_image = cv2.imread('matty.jpg')
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(grey,1.01)
for (x,y,w,h) in faces:
cv2.rectangle(test_image,(x,y),(x+w,y+h),(255,0,0),2)
plt.imshow(cv2.cvtColor(test_image, cv2.COLOR_BGR2RGB))
เรียกฟังก์ขั่น มาใช้ กับภาพที่เปลี่ยนสีแล้ว จากนั้น วาดรูปสี่เหลี่ยม ตรงจุดที่พบใบหน้า
แสดงผลบนภาพต้นฉบับที่ถูกเปลี่ยนค่าสีกลับเป็น RGB
ความแม่นยำมาก น้อย อยู่ที่สูตรคำนวณและ ภาพต้นฉบับด้วย
Eye Detection
การตรวจจับดวงตา ก็เป็นอีกเทคโนโลยีนึงที่ มาใน haarcascade
ซึ่งจำเป็นต้องติดตั้งไฟล์ haarcascade_eye.xml
ตัวอย่าง
(ใช้ไลบรารี เดิม)
test_image = cv2.imread('matty.jpg')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
eyes = eye_cascade.detectMultiScale(grey, 1.3, 1)
for (x,y,w,h) in eyes:
cv2.rectangle(test_image,(x,y),(x+w,y+h),(255,255,255),2)
plt.imshow(cv2.cvtColor(test_image, cv2.COLOR_BGR2RGB))
reference
Top comments (0)