โปรแกรมแรก OpenCV Python ด้วย PyCharm
OpenCV (Open source Computer Vision) เป็นไลบรารีฟังก์ชันการเขียนโปรแกรม (Library of Programming Functions) โดยส่วนใหญ่จะมุ่งเป้าไปที่การแสดงผลด้วยคอมพิวเตอร์แบบเรียลไทม์ (Real-Time Computer Vision)
ขอบเขตการใช้งานของ OpenCV ค่อนข้างกว้าง มีความสามารถหลากหลายหลากหลาย นอกจากรูปภาพธรรมดาแล้วยังใช้จัดการกับวีดีโอภาพเคลื่อนไหว อัลกอริธึมที่ใช้มีตั้งแต่แบบง่ายๆไปจนถึงระดับสูง
1. ติดตั้ง Python เวอร์ชั่น 3.7.6 ลงบน Windows 10
ดาวน์โหลดไฟล์ติดตั้ง Python เวอร์ชัน 3.7.6 (ซึ่งมีความเหมาะสมในการใช้งาน OpenCV) ได้ที่
https://www.python.org/downloads/release/python-376/
เลือก Windows x86-64 executable installer
การติดตั้ง ให้เลือก “Add Python 3.7 PATH” และกดตรง “Install Now”
2. ติดตั้งโปรแกรม PyCharm
โดย PyCharm จัดอยู่ในหมวด IDE (Integrated Development Environment) เพราะว่ามีเครื่องไม้เครื่องมือครบครันแบบ Full option เรียกได้ว่าเป็นหนึ่งในเครื่องมือในการเขียนโปรแกรมมิ่งภาษา Python ที่ดีที่สุดอีกตัวหนึ่ง ซึ่งทางผู้พัฒนาก็คือ Jetbrains บริษัทซอฟต์แวร์ยักษ์ใหญ่สัญชาติเช็ก เจ้าของ IDE ชื่อดังมากมายอีกหลายตัว
ดาวน์โหลดไฟล์ติดตั้ง PyCharm ได้ที่
https://www.jetbrains.com/pycharm/download/#section=windows
เลือกติดตั้งตัวฟรี คือ PyCharm Community
ให้เลือก .py และ Add “bin” folder to the PATH
เลือก Reboot now -> Finish (รีสตาร์ทคอมพิวเตอร์)
3. สร้างโปรเจค และ เพิ่มแพคเก็จ OpenCV
เปิดโปรแกรม PyCharm Community
เลือก New Project
ชื่อโปรเจคตามตัวอย่างคือ pythonProject -> Create
เพิ่มแพคเก็จ OpenCV โดยไปที่ File -> Settings…
ไปที่ Python Interpreter
เลือกเป็น Python 3.7 แล้ว คลิกเครื่องหมาย +
ทีช่องค้นหา พิมพ์ opencv -> คลิกที่ opencv-python -> Install Package
แสดงการติดตั้งสำเร็จ แล้วปิดหน้าต่างลงไป
แสดง แพคเก็จ OpenCV ที่เพิ่มเข้ามา -> OK
4. ทดสอบใช้งาน OpenCV
สร้างไฟล์ Python โดยคลิกขวาที่โฟลเดอร์ venv -> New -> Python File
ตั้งชื่อไฟล์ ในตัวอย่างเป็น test-opencv -> Enter
เขียนโค้ดดังนี้
import cv2
print("Package import")
ทดสอบการทำงานโดย คลิกขวา ในพื้นที่การเขียนโค้ด -> Run ‘test-opencv’
ที่ด้านล่าง แสดง Package import แสดงว่า OpenCV ของเราพร้อมใช้งานกับ Python แล้ว
5 .โปรแกรมแรก OpenCV Python
ดาวโหลดไฟล์วิดีโอ ball_tracking_example.zip
http://www.lungmaker.com/files/ball_tracking_example.zip
คลายซิป แล้วก๊อปปี้ไปที่โฟลเดอร์ venv ของโปรเจค Python
C:\Users\xxxxxxx\PycharmProjects\pythonProject\venv
ที่ไฟล์ test-opencv เขียนโค้ดใหม่ดังนี้
import cv2
import imutils
import time
greenLower = (29, 86, 6)
greenUpper = (64, 255, 255)
vs = cv2.VideoCapture("ball_tracking_example.mp4")
time.sleep(2.0)
while True:
_, frame = vs.read()
if frame is None:
break
blurred = cv2.GaussianBlur(frame, (11, 11), 0)
width, height = frame.shape[:2]
hsv = cv2.cvtColor(blurred, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, greenLower, greenUpper)
mask = cv2.erode(mask, None, iterations=2)
mask = cv2.dilate(mask, None, iterations=2)
cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
center = None
if len(cnts) > 0:
c = max(cnts, key=cv2.contourArea)
((x, y), radius) = cv2.minEnclosingCircle(c)
M = cv2.moments(c)
center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))
# To see the centroid clearly
if radius > 10:
cv2.circle(frame, (int(x), int(y)), int(radius), (0, 255, 255), 5)
cv2.imwrite("circled_frame.png", cv2.resize(frame, (int(height / 2), int(width / 2))))
cv2.circle(frame, center, 5, (0, 0, 255), -1)
cv2.imshow("Frame", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
vs.release()
cv2.destroyAllWindows()
Run
แสดงการ Error ว่าไม่พบโมดูล,ชื่อ imutils ซึ่งเป็น library เบื้องต้นของ image processing พวกหมุนภาพ กลับภาพ ปรับขนาด
แก้ไขโดยการ เพิ่มแพคเก็จ imutils โดยขั้นตอนเหมือนกับ การเพิ่มแพคเก็จ OpenCV
โดยไปที่ File -> Settings… -> Python Interpreter -> คลิกเครื่องหมาย +
ทีช่องค้นหา พิมพ์ imutils -> คลิกที่ imutils -> Install Package
แสดงการติดตั้งสำเร็จ แล้วปิดหน้าต่างลงไป
แสดง แพคเก็จ imutils ที่เพิ่มเข้ามา -> OK
Run อีกครั้ง
โปรแกรมจะแสดง วิดีโอ และการติดตามวัตถุ ในที่นี้คือ ลูกบอลสีเขียว แสดงว่าขั้นตอนนี้สำเร็จแล้ว
6. ติดตามวัตถุจากกล้อง webcam
แก้ไขโค้ด บรรทัดที่ 8 จาก
vs = cv2.VideoCapture("ball_tracking_example.mp4")
เป็น
vs = cv2.VideoCapture(0)
ทดสอบ Run จะแสดงการติดตามวัตถุ ในที่นี้คือ ลูกเทนนิส สีเขียว จาก webcam หรือ กล้องบน แล็ปท็อปคอมพิวเตอร์ แสดงว่าขั้นตอนนี้สำเร็จแล้ว
อยากได้ค่าพิกัดของตำแหน่ง x,y ของจุดสีแดงออกมาเก็บในตัวแปรเพื่อส่งออกให้ MCU ใช้คำสั่งอะไรคับ