DEV Community

Cover image for Computer Vision
indyfunder
indyfunder

Posted on

Computer Vision

Computer Vision จะเกี่ยวกับการสร้างแบบจำลองและการจำลองการมองเห็นของมนุษย์โดยใช้ซอฟต์แวร์และฮาร์ดแวร์คอมพิวเตอร์ วันนี้เราจะพาไป เรียนรู้รายละเอียดเกี่ยวกับเรื่องนี้

  • ทำความเข้าใจฉาก 3 มิติจากภาพ 2 มิติ ของโครงสร้างที่มีอยู่ในภาพ

Computer Vision Hierarchy

  1. Low-level vision − การประมวณภาพ การแยกคุณลักษณะของภาพ
  2. Intermediate-level vision − จะรวมถึง การจดจำวัตถุ และการประมั่วผลภาพ 3 มิติ
  3. High-level vision − จะมีการอธิบาย แนวคิดของภาพ เช่น กิจกรรม ความตั้งใจ และพฤติกรรม

อย่างแรกเลยคือต้องติดตั้ง ไลบรารี ที่ชื่อว่า OpenCV (Open Source Computer Vision) เป็นไลบรารีของฟังก์ชั่นการเขียนโปรแกรมที่ ที่เกี่ยวกับ Computer Vision แบบเรียลไทม์เป็นหลัก

pip install opencv_python
Enter fullscreen mode Exit fullscreen mode

สอนการอ่าน และ เขียนไฟล์ภาพ ด้วยฟังก์ชั่นของ 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
Enter fullscreen mode Exit fullscreen mode
img = io.imread("/content/matty.jpg")
Enter fullscreen mode Exit fullscreen mode

อ่านไฟล์

cv2_imshow(img)
Enter fullscreen mode Exit fullscreen mode

แสดงผลภาพ


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/khvvpp187rr7h6iog8jl.png)


Enter fullscreen mode Exit fullscreen mode
cv2.imwrite('save_newmatty.png'img)
Enter fullscreen mode Exit fullscreen mode

จะทำการเขียนไฟล์ ขึ้นมาใหม่(เป็นสกุลไฟล์อื่นได้) โดยชื่อ save_newmatty

True
Enter fullscreen mode Exit fullscreen mode

จะแสดงผล 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
Enter fullscreen mode Exit fullscreen mode

ลงไลบรารี

img = cv2.imread("/content/matty.jpg")
Enter fullscreen mode Exit fullscreen mode
img_new = cv.cvtColor(img,cv.COLOR_BGR2RGB)
final_frame = cv.hconcat((img, img_new))
cv2_imshow(final_frame)
Enter fullscreen mode Exit fullscreen mode

Image description
จะเห็นว่าภาพแรกคือภาพ ค่าสี BGR ส่วนอีกภาพคือกลับเป็นRGB

img_gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
cv2_imshow(img_gray)
Enter fullscreen mode Exit fullscreen mode

Image description
เปลี่ยนเป็นค่าสี grayscale


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
Enter fullscreen mode Exit fullscreen mode

ลงไลบรารี

cv2.imwrite('img_edge.jpg',cv2.Canny(img,200,300))
Enter fullscreen mode Exit fullscreen mode

เขียนไฟล์ใหม่ ที่เป็นรูปแบบ edge

cv2_imshow(io.imread("/content/img_edge.jpg"))
Enter fullscreen mode Exit fullscreen mode

แสดงผลภาพดังกล่าว
Image description


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)
Enter fullscreen mode Exit fullscreen mode

ลงไลบรารี

base_image = cv2.imread('matty.jpg')
grey = cv2.cvtColor(base_image, cv2.COLOR_BGR2GRAY)
Enter fullscreen mode Exit fullscreen mode

ลองเรียกรูปภาพ และ เปลี่ยนค่าสี

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))
Enter fullscreen mode Exit fullscreen mode

เรียกฟังก์ขั่น มาใช้ กับภาพที่เปลี่ยนสีแล้ว จากนั้น วาดรูปสี่เหลี่ยม ตรงจุดที่พบใบหน้า
แสดงผลบนภาพต้นฉบับที่ถูกเปลี่ยนค่าสีกลับเป็น RGB

Image description
ความแม่นยำมาก น้อย อยู่ที่สูตรคำนวณและ ภาพต้นฉบับด้วย


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))
Enter fullscreen mode Exit fullscreen mode

Image description
แสดงผล


reference


Top comments (0)