Professional Documents
Culture Documents
lesson1 Drawing
lesson2 Region-of-interest (ROI)
บทนาก่อนเข้ าเนื้อหา lesson3 Import_Img_Video_Webcam
+ INSTALL SOFTWARE lesson4 Haar_Cascade
PYTHON PYTHON เบื้องต้ น lesson5 Creat Haar_Cascade
lesson6 Resolution
Lesson7 Save Video
Lesson8 Color Track
Lesson9 Background Subtraction
Lesson10 Post Test
Lesson11 FaceRecognition
Thiraphong.thi@egat.co.th Lesson12 OCR : Tesseract
แผนก หทปอ-ห. กอง กทส-ห. ฝ่ าย อจส.
Lesson13 IP Webcam + raspberry pi
บทนาก่อนเข้ าเนื้อหา
การพัฒนาระบบ CCTV อัจฉริยะ ด้ วย Machine Learning
Image Processing ทีเ่ รานามาประยุกต์ ใช้ เป็ นแบบ Machine Learning มีด้วยกัน 2 แบบ
ความหมายของ Machine Learning ในแบบพื ้นฐานที่สดุ คือ การใช้ อลั กอริธึมในการวิเคราะห์ข้อมูล เรี ยนรู้จากข้ อมูลนัน้ แล้ วทาการคาดการณ์ /ประเมินผลถึงสิ่งใดสิ่งหนึง่
เปรี ยบเทียบกับคนให้ เห็นชัดเจนขึ ้น คือการที่เราเรี ยนรู้ผ่านการเห็นสิ่งต่างๆ จึงบอกได้ ว่าอะไรเป็ นอะไร เช่น เมื่อเห็นนก เราก็รับรู้ได้ ว่ามันคือนก ไม่ว่าจะทากิริยาอะไรอยู่ ยืน หันหลัง หรื อกางปี ก
บินถือเป็ น “การฝึ ก”เครื่ องจักรให้ เรี ยนรู้ที่จะทาสิ่งใดสิ่งหนึง่ โดยเฉพาะ ผ่านการป้อนข้ อมูลจานวนมหาศาล
ระบบกล้อง CCTV ของ ม.เกษตรฯ รุ่ นทาเอง 1.AI ทีก่ ล้องส่ วน AI ทีอ่ ยู่ในกล้ อง
pi camera
712 บาท
raspberry pi 3
1,469 บาท
1,355 บาท
touch screen lcd
AI ทีก่ ล้ องส่ วน AI ทีอ่ ยู่ในกล้ องเลยจะมีข้อดี คือ คานวณในกล้ องและแสดงผลได้ เลย ส่ งเมสเสจมาบอกที่
เซิร์ฟเวอร์ กพ็ อ ว่ าตอนนีเ้ จออะไร และสั่ งการได้ (แต่ vdo stream ก็ยงั ส่ งมาได้ เหมือนแบบปกติอยู่)
กล้อง Raspberry Pi Camera Comparison ติดตั้ง PI CAMERA
Model Chipset Megapixels Advertised FOV
Desktop
Mobile Process
Flask—Micro-framework with Python based Flask คือ framework ตัวหนึ่งแหละ ที่สามารถรันเป็ น Server ได้ มีพ้นื ฐานภาษาที่ใช้กค็ ือ ภาษา Python และแน่นอนมัน
เหมาะสมกับ Web Developer ที่ตอ้ งการความง่าย สิ่ งที่วา้ วที่สุดเลยอยูต่ รงที่ Flask เป็ น Micro-framework ตามที่ผมเข้าใจ
และตามที่ผมจะสามารถตีความได้ในตอนนี้คือ มันสามารถประกาศ เพียง 5 บรรทัด ในการสร้าง Server และหน้าเว็บ
สาหรับแสดงผลได้เลย
Installation Flask
pip install Flask
Running on http://localhost:5000/
โดยเมื่อรันเซิฟแล้ว เราจะมีเซิฟเวอร์ที่ใช้เฟรมเวิร์ก Flask รันอยูบ่ น localhost และ บนพอร์ต 5000 เอาจริ ง ๆ แล้ว การติดตั้งก็ไม่ได้ยากเกินไปนักสาหรับผูเ้ ริ่ มต้น
การพัฒนาระบบ CCTV อัจฉริยะ ด้ วย Machine Learning 2. AI แบบอยู่ทเี่ ซิร์ฟเวอร์ หรื อ Cloud
AI แบบอยูท่ ี่เซิร์ฟเวอร์ หรื อ Cloud
ข้ อดีคือ กล่ำวถือถ้ำอยูท่ ี่เซิ ร์ฟเวอร์ จะรองรับกล้องที่เป็ น IP camera ได้ทุกยีห่ อ้ ทุนจะไม่สูงมำก กำรนำ AI ไปอยูฝ่ ั่ง
เซิ ร์ฟเวอร์ กเ็ พื่อรองรับกล้องระบบเก่ำๆ
ข้ อเสี ยคือ กินกำลัง Bandwidth กำรส่ งมำก และถ้ำจำนวนกล้องมำกขึ้น ระบบเซิ ร์ฟเวอร์ กจ็ ะต้องขยำยให้มำกขึ้นและก็จะ
แพงที่ฝั่งเซิ ร์ฟเวอร์ แทน
2. AI แบบอยู่ทเี่ ซิร์ฟเวอร์ หรื อ Cloud ปัจจุบนั การเชื่อมต่อกล้องวงจรปิ ดมีหลายรู ปแบบ P2P , HTTP , TCP , UDP เป็ นต้นแต่เราจะพูดถึง การเชื่อมต่อแบบ Rtsp หรื อ Real Time
Streaming Protocol เป็ นโปรโตคอลที่ใช้รูปแบบ client/server ที่ถูกออกแบบเพื่อใช้ในการแสดงสื่ อมัลติมีเดีย สาหรับ Real Server เวอร์ชนั่ ใหม่
RTSPจะสนับสนุน SureStreamTM ซึ่งจะสามารถเลือกที่จะส่ งข้อมูลที่อตั ราความเร็วสู งที่สุดในขณะนั้นโดยอัตโนมัติ
ข้อมูลอ้ำงอิง
iOS
http://10.220.1.252:1935/live1/myStream/playlist.m3u8
Android/Other
CCTV ที่ไม่สามารถเรี ยกดูผ่าน RTSP ได้ ทาการ Stream ผ่าน OBS
rtsp://10.220.1.252:1935/live1/myStream
MPEG DASH
http://10.220.1.252:1935/live1/myStream/manifest.mpd
RTMP
rtmp://10.220.1.252:1935/live1/myStream
HDS
http://10.220.1.252:1935/live1/myStream/manifest.f4m
MS Smooth
http://10.220.1.252:1935/live1/myStream/Manifest
- Face Recognition คือระบบกำร
ตรวจหำใบหน้ำของมนุษย์ เทคโนโลยีการประมวลผลภาพ
และปรับภำพใบหน้ำโดยอัตโนมัติ
Image processing
- Object detection ตรวจจับกำร (Image processing)
ตรวจจับวัตถุ
การประมวลผลภาพ (Image Processing) หมายถึง การนา
ภาพมาประมวลผลหรื อคิดคานวณด้ วยคอมพิวเตอร์ เพื่อให้ ได้
- Image Processing Vehicle Counting ข้ อมูลทีเ่ ราต้ องการทั้งในเชิงคุณภาพและปริมาณ
นับจำนวนรถที่มีกำรเข้ำออก INPUT
พัฒนาโปรเจคต่ างๆ
- License Plate Recognition
จำแนกป้ำยทะเบียนรถ
อัตโนมัติ บันทึกจดจำ
ทะเบียนรถ
PROCESSING
- Lane Line Detection
ตรวจสอบระยะห่ำงของรถที่อยูใ่ น
เลนเดียวกัน
- Image Classification
กำรจำแนกข้อมูลด้ำนรู ปภำพ
OUTPUT
INSTALL SOFTWARE
INSTALL SOFTWARE
OPENCV + PYTHON
Anaconda 5.2
Python 3.6 Install
Packet Opencv
Sublime Text 3
- Python programming language) เป็ นภำษำระดับสู ง ซึ่งถูกพัฒนำขึ้นมำโดยไม่ยดึ ติดกับแพลตฟอร์ม
- OpenCV เป็ น open source library สำหรับทำงำนแนว image processing ต่ำงๆ มี interface อยูห่ ลำยภำษำให้เรำเลือกใช้ได้ (C++/Java/Python)
- Sublime Text เป็ นโปรแกรมประเภทอิดิเตอร์ที่ใช้สำหรับเขียนโค้ดโปรแกรม รอรับกำรเขียนโปรแกรมได้หลำย
ขั้นตอนติดตั้งโปรแกรม anaconda Ver. 5.2
1. เข้ำไปที่เว็บไซต์ https://www.anaconda.com/download/
2. เลือกดำวน์โหลดเวอร์ชนั สำหรับระบบปฏิบตั ิกำร Windows 6 9
3 6 คลิกที่ปุ่ม I Agree 9 เลือก Add Anaconda to my PATH environment
variable แล้วคลิกปุ่ ม Install
5 8 11
5 คลิกที่ปุ่ม Next
8 คลิกที่ปุ่ม Next 11 คลิกที่ปุ่ม Finish
ขั้นตอนการติดตั้ง Sublime Text 3
Sublime Text เป็ นโปรแกรมประเภทอิดิเตอร์ที่ใช้
สำหรับเขียนโค้ดโปรแกรม รอรับกำรเขียนโปรแกรมได้หลำย
หลำยภำษำเช่น ASP, ActionScript, AppleScript, BibTeX, C,
C++, C#, CSS, Clojure, D, Diff, Erlang, Go, Graphviz, Groovy,
HTML, Haskell, JSON, Java, JavaScript, LaTeX, Lisp, Lua,
1 3
MATLAB, Markdown, OCaml, Objective-C, Objective-C++,
NEXT NEXT PHP, Pascal, Perl, Plain, Python, R, Ruby, SQL, Scala, TCL,
XML, XSL
2 NEXT 4 INSTALL
วิธีการติดตั้ง OpenCV 3 กับ Python 3
Open เป็ น open source library สำหรับทำงำนแนว image processing ต่ำงๆ NumPy (Numeric Python) เป็ นโมดูลส่วนเสริ มของ Python ที่มีฟังก์ชนั เกี่ยวกับ
มี interface อยูห่ ลำยภำษำให้เรำเลือกใช้ได้ (C++/Java/Python) คณิ ตศำสตร์และกำรคำนวณต่ำงๆ มำให้ใช้งำน โดยทัว่ ไปจะ เกี่ยวกับกำรจัดกำร
ข้อมูลชุด (Array) ขนำดใหญ่และเมทริ กซ์
ขั้นตอนกำรติดตั้ง Packet Opencv
https://pypi.org/project/opencv-python/ https://pypi.org/project/numpy/
comment
ผ่ านทาง Index ของมัน ด้ วยการใช้ Index ในเครื่ องหมาย [ ] (square brackets) “””
s = 'Mountain' Comment
print(s[0]) # M Comment
print(s[4]) # t Comment
print(s[7]) # n “”” PYTHON เบื้องต้ น
Python คำสัง่ กำรเงื่อนไข IF วนรอบกำรทำงำนหรื อคำสัง่ ทำซ้ ำ FOR,WHILE
เราสามารถเขียนโปรแกรม for ลูป เพื่อเรียกค่ าแต่ ละตัวแปรใน lists ได้ โดยใช้ คาสั่ ง in ดังนี้
s = 'Python' รู ปแบบของ for Loop
for
คาสั่ ง if เป็ นคาสั่ งทีใ่ ช้ ควบคุมการทางานของโปรแกรมทีเ่ ป็ นพืน้ ฐานและง่ ายทีส่ ุ ด เราใช้ คาสั่ ง if
for iterating_var in sequence:
for c in s: statements(s)
เพื่อสร้ างเงื่อนไขให้ โปรแกรมทางานตามทีเ่ ราต้ องการ
print(c) n = 11 รู ปแบบของ if
อธิบาย S มีสมาชิกเป็ น P,y,t,h,o,n แล้ วแสดงสมาชิ กทีอ่ ยู่ในขอบเขตนั้นออกมา ในตัวแปล C
512px
ฟังก์ชัน Drawing ใน OpenCV กับ Python
02_Drawing.py มีคาสั่ งทีค่ วรรู้ ดงั ต่ อไปนี้ cv2.line(), cv2.circle() , cv2.rectangle(), cv2.ellipse(), cv2.putText()
เรียงสีแบบ→BGR ค่าสี RGB
# วาดเส้ นสีนา้ เงินโดยมีความหนา 5 px
ตัวอย่ าง
cv2.line(img,(15,20),(70,50),(255,0,0),5)
# วาดวงกลมปิ ดสีแดง
cv2.circle(img,(200,200), 80, (0,0,255), -1)
# วาดรูปวงรี 2 วง
cv2.ellipse(img,(200,200),(80,50),0,0,360,(0,255,0),-1)
cv2.ellipse(img,(200,200),(80,50),45,0,360,(0,0,255),1)
Y=510 H=400
W=500
X=2
guideline 510 400
จุดยอดของสี่ เหลี่ยม จุดยอดของสี่เหลี่ยมผืนผ้ าตรงข้ ามกับ pt1
cv2.rectangle(2,510),(500,400) ,(0,0,255),1
มุมซ้ ายด้ านล่างของข้ อความในรูปภาพ
470
font = cv2.FONT_HERSHEY_SIMPLEX 500
cv2.putText(img,’Text’,(40,470), font, 1,(255,255,255),2) 40
2
วำดเส้นตรง
ใช้คำสั่ง วำดรู ปหลำยเหลี่ยม
cv2.line(img, Point pt1, Point pt2, color[,thickness[,lineType[,shift]]]) ใช้คำสัง่
อธิบำย วำดรู ปวงรี cv2.polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]])
img คือ รู ปภำพ ใช้คำสั่ง อธิบำย
Point pt1 คือ จุดเริ่ มต้นของเส้นตรง cv2.ellipse(img, center, axes, angle, startAngle, endAngle, img คือ รู ปภำพ
Point pt2 คือ จุดสุ ดของเส้นตรง color[, thickness[, lineType[, shift]]]) pts คือ อำร์เรย์ของส่ วนโค้งรู ปหลำยเหลี่ยม
color คือ สี ของเส้นตรง อธิบำย npts คือ อำร์เรย์ของเคำน์เตอร์จุดยอดของรู ปหลำยเหลี่ยม
thickness คือ ควำมหนำของเส้น img คือ รู ปภำพ ncontours คือ จำนวนของเส้นโค้ง
lineType คือ ชนิดของเส้น โดยมีชนิดของเส้นดังนี้ center คือ จุดศูนย์กลำงของรู ปวงรี isClosed คือ ตัวบ่งชี้ที่ระบุวำ่ วำดรู ปหลำยเหลี่ยมปิ ดหรื อไม่ ถ้ำจะปิ ดฟังก์ชนั วำด
LINE_8 (or omitted) - 8-connected line. axes คือ ครึ่ งหนึ่งของขนำดของแกนหลักของวงรี เส้นจำก ยอดสุ ดท้ำยของแต่ละโค้งถึงจุดสุ ดยอดก่อน
LINE_4 - 4-connected line. angle คือ หมุนมุมองศำของวงรี color คือ สี ของรู ปหลำยเหลี่ยม
LINE_AA - antialiased line. startAngle คือ องศำมุมเริ่ มต้นส่ วนโค้งวงรี thickness คือ ควำมหนำของขอบรู ปหลำยเหลี่ยม
shift คือ จำนวนเศษส่ วนบิตในพิกดั จุด endAngle คือ องศำมุมสิ้ นสุ ดส่ วนโค้งวงรี
วำดวงกลม color คือ สี ของวงรี วำดข้อควำมลงไปในรู ป
ใช้คำสั่ง ใช้คำสั่ง
วำดสี่ เหลี่ยม
cv2.circle(img, center, radius, color[, thicknes]) cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[,
ใช้คำสั่ง
อธิบำย bottomLeftOrigin]]])
cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
img คือ รู ปภำพ อธิบำย
อธิบำย
center คือ จุดศูนย์กลำงของวงกลม img คือ รู ปภำพ
img คือ รู ปภำพ
radius คือ รัศมีของวงกลม text คือ ข้อควำม
pt1 คือ จุดยอดของสี่ เหลี่ยม
color คือ สี ของวงกลม org คือ มุมซ้ำยด้ำนล่ำงของข้อควำมในรู ปภำพ
pt2 คือ จุดยอดของสี่ เหลี่ยมผืนผ้ำตรงข้ำมกับ pt1
thicknes คือ ควำมหนำของเค้ำร่ ำงวงกลม fontFace คือ ชนิดของ Font (ดูเพิ่มเติมได้จำกเอกสำรข้ำงล่ำงครับ)
color คือ สี ของสี่ เหลี่ยม
lineType คือ ชนิดของเส้น fontScale คือ ขนำด Scale ของ Font
shift คือ จำนวนเศษส่ วนบิตในพิกดั ของศูนย์กลำง และค่ำรัศมี thickness คือ ควำมหนำของเส้นใช้วำดข้อควำม
lesson2 Region-of-interest (ROI) คือบริเวณทีเ่ ราสนใจ อาจจะเป็ นบริเวณใดภายในภาพก็ได้ โดยการตีกรอบล้อมรอบบริเวณทีส่ นใจ ด้ วยวงกลม
กรอบสี่ เหลีย่ ม หรื อกรอบรู ปเหลีย่ มใดๆ เพื่อนาภาพเฉพาะส่ วนดังกล่าวมาประมวลผล หรื อเปลีย่ นแปลงภาพตามต้ องการ โดยไม่ มผี ลกระทบกับส่ วนอื่นๆ ซึ่งใน 1 ภาพ สามารถกาหนดได้ หลายๆ ROI
01_roi.py
ตัวอย่ าง ROI
Img.shape = (435, 770, 3)
213
Y
434 H
505 W
กว้ าง
สูง
X 255
แบบทดสอบ lesson2 ROI
1.สร้ำง กรอบ rectangle ครอบ Frame บริ เวณที่ตอ้ งการ จากนั้น ทาการ ROI ไปยังพื้นที่ๆ ต้องการให้แสดงภายใน frame
Img.shape = (435, 770, 3)
ผลลัพธ์แบบทดสอบ
213
Y
434 H
505 W
กว้ าง
X 255 สูง
roi =img [213:434,255:505] #= [255,255,255]#[h:y,x:w]or[h:y,w:x] or[y:h,w:x]
cv2.rectangle(img,(255,434),(505,213),(0,0,255),4)#(x,y),(w,h)
img[213-213:434-213,255-255:505-255]=roi
lesson3 Import_Img_Video_Webcam มีคำสัง่ ที่ควรรู ้ cv2.imread(), cv2.imshow() , cv2.imwrite()
cv2.IMREAD_COLOR : =1 โหลดรู ปภำพสี มีควำมโปร่ งใสของรู ปภำพ เป็ นค่ำเริ่ มต้น
cv2.IMREAD_GRAYSCALE : = 0 โหลดรู ปภำพในโหมดระดับสี เทำ (grayscale mode) คาสั่ งแสดงภาพ จาก Webcam
cv2.imread(ไฟล์รูปภำพ,ค่ำสี ) = อ่ำนไฟล์
cv2.imwrite(ชื่อไฟล์,วัตถุรูปภำพ) = เขียนไฟล์ cv2.IMREAD_UNCHANGED : =-1โหลดรู ปภำพโดยเรี ยกใช้ alpha channel
cv2.imshow(ชื่อไฟล์,วัตถุรูปภำพ) = โชว์ไฟล์
0 คือ default Webcam
คาสั่ งแสดงภาพ จากไฟล์ คาสั่ งแสดงภาพ จาก Webcam
แสดงภำพ จำก File “Video.mp4”
cap = cv2.VideoCapture(0)
img = cv2.imread('Image.jpg')
while(True): จับภาพแบบ frame by frame
cv2.imshow('img',img) แสดงภำพ
ret, frame = cap.read() คาสั่ งแสดงภาพ จากไฟล์
จบกำรทำงำน cv2.imshow('first_camera', frame)
cv2.waitKey(0) แสดงภาพ
if cv2.waitKey(1) & 0xFF == ord('q'):
cv2.destroyAllWindows()
break หน้ าจอ จะปิ ดก็ต่อเมื่อ ผมกด q
cap.release()
03_Import_Img_Imwrite.py คาสั่ งเขียนภาพ
01_Import_Img.py cv2.destroyAllWindows()
จบการทางาน
02_Import_Webcam.py
แบบทดสอบ lesson3 Import_Img_Video_Webcam
1.นำเข้ำข้อมูลจำก webcam พร้อมบันทึกรู ปภำพโดยเรี ยงรำยชื่อรู ปภำพ (Frame1.png ถึง Frame5.png)
guideline
.format() เพื่อจัด format ในข้อควำม
os.path.join() เป็ นกำรรวม 2 string เข้ำด้วยกัน โดยมี "\\" คัน่ ระหว่ำง 2 string นั้น IMG
กำรเข้ำถึง directory ที่ตอ้ งกำร เช่น ‘C:\\Users\\Benq\\Desktop\\Software\\software\\opencv’
os.path.join('path', ‘frame')
lesson4 Haar_Cascade
Haar Cascade เป็ น feature หนึ่งในไลบรำรี่ OpenCV ที่ใช้ Detect แล้วก็ Recognize วัตถุต่ำงๆจำก Feature ที่มีอยูใ่ นรู ปนั้นๆ
กำรแบ่งพื้นที่ของภำพด้วยรู ปแบบสำเร็จรู ป 4 แบบ โดยกำหนดจำก Haar-like features ไว้ดงั รู ป ( A – B – C – D ) จำกนั้นจึงคำนวณ ตัวอย่าง Cascade.XML (Face And Eye Detector)
ตำรำงสี ของภำพโดยกำร อินทิเกรตตำรำงสี ที่อยูใ่ นพื้นที่อยูใ่ นช่องสี ขำว ลบด้วยตำรำงสี ที่อยูใ่ นพื้นที่อยูใ่ นช่องสี ดำ ในกระบวนกำร
สร้ำง รู ปอินทิกรัล แล้วนำผลที่ได้ไปใช้ใน Adaboost ที่เป็ นอัลกอริ ทึมสำหรับกำรเรี ยนรู ้แบบหนึ่ง ( Adaptive Boost Learning
Algorithm ) เนื่องจำกจำนวนข้อมูลมีจำนวนมหำศำล ( ขนำด 24 x 24 ช่อง จะมีรูปแบบที่เป็ นได้ท้งั หมด 162,336 รู ปแบบ )
eyes = eye_cascade.detectMultiScale(roi_gray)
for (ex,ey,ew,eh) in eyes:
cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
cv2.imshow('face_detector', img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
03_Face detection and counting.py
ภำษำ Python ไม่มีขอ้ มูลชนิดอำร์เรย์ สำมำรถใช้ list แทนได้ แต่
enumerate เป็ นคำสั่งสำหรับแจกแจงค่ำ index และข้อมูล
ใน index ในรู ปแบบทูเพิล (Tuple)ดังนี้ (Index,Value) โดยต้อง หำกใช้โมดูล NumPy เรำจะสำมำรถใช้ขอ้ มูลชนิดอำร์เรย์ได้
ใช้กบั ข้อมูลชนิด listในกำรรับค่ำข้อมูลพร้อม Index ใน List ได้ ฟังก์ชนั len() ใช้เพื่อนับจำนวนสมำชิกภำยใน List
และในกำรลูปพร้อมหำค่ำ index ของ list ในภำษำ Python
Text ขั้นตอน
lesson6 Resolution
02_SetVideoCapture3.py
Code Resolution
cap = cv2.VideoCapture(0) ในกำรระบุ FourCC code โดยมี video codec ที่ทำงำนได้โดยไม่ได้ลง video codec เพิ่มดังนี้
fourcc = cv2.VideoWriter_fourcc(*'XVID’) บน Fedora: DIVX, XVID, MJPG, X264, WMV1, WMV2
บน Windows: DIVX, XVID
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480)) โดยต้องระบุ FourCC code ที่บนั ทึกลงไปด้วย และกำหนดจำนวนเฟรมต่อวินำที (fps) ขนำดของ
while(cap.isOpened()): วิดีโอcv2.VideoWriter(ชื่อไฟล์วิดีโอ,fourcc, จำนวนเฟรมต่อวินำที, (ขนำดแกน x,ขนำดแกน y))
ret, frame = cap.read()
if ret==True: เขียนไฟล์ Video
out.write(frame) ผลลัพธ์ จะได้ ไฟล์ output.avi ซึ่งบันทึกวิดโี อจากกล้ องไว้ ครับ
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cap.release()
อธิบายคาสั่ งเพิม่ เติม
out.release()
คำสัง่ isOpened() เป็ นคำสัง่ สำหรับตรวจเช็คว่ำทุกอย่ำงพร้อมใช้งำน
cv2.destroyAllWindows()
หรื อไม่ โดยจะคืนค่ำบูลีน (True/False)
แบบทดสอบ lesson7 Save Video
1.นำภำพ Webcam มำผ่ำนกำร Cascade เมื่อมีกำร Detect Face ให้ทำกำรบันทึก Video ลงบน Directory File
Lesson8 Color Track
ระบบสี HSV (Hue Saturation Value) เป็ นการพิจารณาสี โดยใช้ Hue Saturation และ Value ค่ าสี HSV MIN&MAX
Hue คือ ค่าสี ของสี หลัก(แดง เขียวและน้ าเงิน)ในทางปฏิบตั ิจะอยูร่ ะหว่าง 0 และ 255(Opencv 0-180) minColor = Scalar(70, 10, 130)
ซึ่งถ้า Hue มีค่าเท่ากับ 0 จะแทนสี แดงและเมื่อ Hue มีค่าเพิ่มขึ้นเรื่ อย ๆ สี กจ็ ะเปลี่ยนแปลงไปตามสเปกตรัมของสี จนถึง 256 White maxColor =Scalar(180, 110, 255)
Saturation คือ ความบริ สุทธิ์ของสี
Value คือ ความสว่างของสี ซึ่งสามารถวัดได้โดยค่าความเข้มของความสว่างของแต่ละสี ที่ประกอบกัน minColor = Scalar(60, 110, 110)
Green maxColor =Scalar(100, 220, 250)
OpenCV จะมีการเปลี่ยนสีพ้นื ที่เพียงสองแบบที่กนั อย่างแพร่ หลายมากที่สุด BGR ↔gray และ BGR ↔ HSV
สาหรับการแปลงสี เราจะใช้ฟังก์ชนั่ cv2.cvtColor (ตัวแปร,ค่ าสี ทเี่ ปลีย่ น) ซึ่งกาหนดประเภทของการแปลง minColor = Scalar(136, 87, 111)
สาหรับการแปลง BGR →สี เทาที่เราใช้ cv2.COLOR_BGR2GRAY Red maxColor =Scalar(180, 255, 255)
ในทานองเดียวกันสาหรับ BGR → HSV เราใช้ cv2.COLOR_BGR2HSV
ระบบสี HSV Blue minColor = Scalar(110,50,50)
maxColor =Scalar(130,255,255)
lower = {'red':(166, 84, 141), 'green':(66, 122, 129), 'blue':(97, 100, 117), 'yellow':(23, 59, 119), 'orange':(0, 50, 80)}
upper = {'red':(186,255,255), 'green':(86,255,255), 'blue':(117,255,255), 'yellow':(54,255,255), 'orange':(20,255,255)}
Lower AND Upper
# จำกัดภำพ HSV รับเฉพำะสี เหลือง
ติดตำมสี ดว้ ย OpenCV ด้วย HSV
cv2.inRange(hsv,ค่ าสี HSV ช่ วงเริ่มต้ น , ค่ าสี HSV ช่ วงสิ้นสุ ด) ในการตรวจจับวัตถุจากการติดตามสี ด้วย OpenCV กับ Python มีคาสั่ งใช้ งานดังนี้
เป็ นคาสั่งใช้ ตรวจจับสีที่อยู่ในช่ วงสี HSV ที่กำหนดครับ ในกำรกำหนดค่ำสี HSV ช่วงเริ่ มต้น - สิ้นสุด import cv2
ส่วนใหญ่จะใช้โมดูล numpy เข้ำมำช่วยเรื่ องกำรเขียนช่วงข้อมูลสี HSV ครับ import numpy as np
# Bitwise-AND mask และภำพต้นฉบับ
cap = cv2.VideoCapture(0)
cv2.bitwise_and(cv2.bitwise_and(src1, src2[, dst[, mask]])) while(1):
src1 - ชุดข้อมูลแรก
ret, frame = cap.read()
src2 - ชุดข้อมูลที่สอง # แปลงสี BGR ไปยัง HSV hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
dst - ชุดข้อมูลผลลัพธ์ที่มีขนำดและชนิดเดียวกันเป็ นชุดข้อมูลสำหรับกำรป้อนค่ำ
# ช่วงของสี เหลืองในระบบ HSV lower_yellow = np.array([10,100,100], dtype=np.uint8)
mask – เป็ นเหมือนหน้ำกำกที่รับค่ำมำรวม
upper_yellow = np.array([30,255,255], dtype=np.uint8)
คำสัง่ นี้ส่วนใหญ่มกั จะนำเฟรมปกติกบั เฟรมจำกคำสัง่ cv2.inRange()
yellow = cv2.inRange(hsv, lower_yellow, upper_yellow)
มำรวมกันเพื่อเปรี ยบเทียบกับสี จริ ง
mask = cv2.bitwise_and(frame,frame, mask= yellow)
cv2.imshow('frame',frame)
cv2.imshow('yellow',yellow)
cv2.imshow('mask',mask)
k = cv2.waitKey(5) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()
อธิบายเพิม่ เติม Color Track
ประกำศตัวแปรซึ่งใช้สร้ำงพื้นที่สำหรับรู ปภำพ เนื่องจำกกำรอ่ำนค่ำรู ปจำก OpenCV จะถูกเก็บในรู ปของ Numpy Array ซึ่งปกติแล้ว Array ของ Python จะเป็ น 1 มิติ เท่ำนั้น แต่
NumPy Array จะถูกออกแบบให้รองรับ Array หลำยมิติได้ ซึ่งคำสัง่ สร้ำง Aray หลักๆจะใช้คำสัง่ np.array([x],[y],[z]) สำหรับ 3 มิติ และ x,y,z เป็ นตัวเลข แต่ยงั มีคำสัง่ สำหรับ
Array พิเศษ เช่น
np.ones((row,column,chanal),dtype) สร้ำง unit matrix และ dtype เป็ นชนิดของข้อมูลในเมตตริ ก เช่น จำกโค้ด kernal = np.ones((5 ,5), "uint8")
cv2.dilate() เป็ นกำรตรวจสอบเปรี ยบเทียบ ค่ำสี ของแต่ละ pixel ที่อยูใ่ น kernel ถ้ำมีอย่ำงน้อย 1
pixel ใน kernel ที่มีสีตรงกับสี ที่ใช้เปรี ยบเทียบจะเปลี่ยนสี ใน kernel นั้นเป็ นสี ที่ใช้เปรี ยบเทียบ
Lesson9 Background Subtraction
fgbg = cv2.createBackgroundSubtractorMOG2()
while(1):
ret, frame = cap.read()
fgmask = fgbg.apply(frame)
cv2.imshow('frame',fgmask)
k = cv2.waitKey(30) & 0xff
if k == 27:
Background Subtraction break
เป็ นเทคนิคที่ใช้ในกำรหำควำมต่ำงของเฟรม foreground กับเฟรม background โดยประโยชน์ของกำรทำ background subtraction นั้นจะ
สำมำรถบอกได้วำ่ มีวตั ถุอะไรที่กำลังเคลื่อนไหวอยูใ่ นเฟรม foreground |foreground(x,y) – background(x,y)|
เรำสำมำรถที่จะทำกำรติดตำมวัตถุ หรื อภำพเบื้องหน้ำได้วำ่ เคลื่อนที่ไปในทิศทำงใด
ภำพพื้นหน้ำ - หลัง ด้วยฟังก์ชนั เดียวคือ
ํ
createBackgroundSubtractorMOG2 ในกำรแสดงภำพแต่ละภำพ ใช้ กำรวนซ้ำตลอดเวลำ จำก while(1) และให้หยุดเมื่อกด คีย ์ ESC (k==27)
LINE Notify คืออะไร
เป็ นบริ กำรของ LINE ที่ให้สำมำรถส่งข้อควำม กำรแจ้งเตือนต่ำง ๆ ไปยังบัญชีของคุณหรื อกลุ่มต่ำงๆที่คุณอยูไ่ ด้
ผ่ำนทำง API ที่ LINE ได้เตรี ยมไว้ให้นนั่ เอง
ขั้นตอนการสมัตร LINE Notify
1
ขั้นตอนที่1 ไปที่ https://notify-bot.line.me/th แล้วกดเข้ำสู่ระบบ
ขั้นตอนที4 กดปุ่ ม “ออก Token”
จำกนั้นให้ใส่
2 4
1. ชื่อของ Token (ชื่อของ LINE Notify)
2. เลือกห้องแชทที่ตอ้ งกำรส่ งข้อควำมแจ้งเตือน
จำกนั้นกดปุ่ มออก Token เพื่อรับ Token key
ผมเลือกให้ ส่งแบบตัวต่อตัวครับ
3 5
ขั้นตอนที5 ให้คดั ลอก Token key ไว้นะครับ อย่ำเพิ่งปิ ด pop up ไม่อย่ำงนั้นต้องออก Token ใหม่
ขั้นตอนที่3 หลังจำก Login สำเร็จ ให้กดที่ลูกศรชี้ลงด้ำนข้ำงชื่อบัญชีแล้วเลือก “หน้ำของฉัน” และที่แอพ LINE จะมีบญั ชี LINE Notify แจ้งว่ำ “ ออก Personal Access Token แล้ว”
Lesson10 Post Test
ขั้นตอนกำรติดตั้ง LINE Notify
ผลลัพธ์
I show some tests done with this project, where I also have used photos to verify if the recognizer works
Lesson12 OCR : Optical Character Recognition
OCR : Optical Character Recognition คือซอฟแวร์ที่แปลงภาพเป็ นตัวอักษรดิจิตอล
Tesseract OCR เป็ น API ของกูเกิ้ลใช้สาหรับการทา OCR
ใช้งานง่ายมากเพียงใช้คาสัง่ tesseract ชื่อภาพ ชื่อไฟล์ชวั่ คราว -l ภาษา
ใช้ใน Python โดยการอิมพอร์ต module os มาเพื่อใช้ cmd https://github.com/tesseract-ocr/tesseract
ขั้นตอนการติดตั้ง ตัวอย่ างผลลัพธ์
Download https://github.com/UB-Mannheim/tesseract/wiki
1. Next
คาสั่ง tesseract
tesseract test.jpg output -l tha+eng
อธิบาย
Python tesseract
ภาษา
ชื่อไฟล์
Lesson13 IP Webcam + raspberry pi
URL
ขั้นตอนการติดตั้ง IP Webcam + raspberry pi
3.Copy Image address
1. โหลด App 'IP Webcam' 2.Coppy URL จากApp แล้ว Paste บนช่อง URL
Thiraphong.thi@egat.co.th
แผนก หทปอ-ห. กอง กทส-ห. ฝ่ าย อจส.