<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: indyfunder</title>
    <description>The latest articles on DEV Community by indyfunder (@indyfunder).</description>
    <link>https://dev.to/indyfunder</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1061362%2Faec8aa16-0540-4f18-a75f-461d0ef38e9b.png</url>
      <title>DEV Community: indyfunder</title>
      <link>https://dev.to/indyfunder</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/indyfunder"/>
    <language>en</language>
    <item>
      <title>Computer Vision</title>
      <dc:creator>indyfunder</dc:creator>
      <pubDate>Tue, 11 Apr 2023 13:43:18 +0000</pubDate>
      <link>https://dev.to/indyfunder/computer-vision-56cm</link>
      <guid>https://dev.to/indyfunder/computer-vision-56cm</guid>
      <description>&lt;p&gt;&lt;strong&gt;Computer Vision&lt;/strong&gt; จะเกี่ยวกับการสร้างแบบจำลองและการจำลองการมองเห็นของมนุษย์โดยใช้ซอฟต์แวร์และฮาร์ดแวร์คอมพิวเตอร์ วันนี้เราจะพาไป เรียนรู้รายละเอียดเกี่ยวกับเรื่องนี้&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ทำความเข้าใจฉาก 3 มิติจากภาพ 2 มิติ ของโครงสร้างที่มีอยู่ในภาพ&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Computer Vision Hierarchy&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Low-level vision&lt;/strong&gt; − การประมวณภาพ การแยกคุณลักษณะของภาพ&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intermediate-level vision&lt;/strong&gt; − จะรวมถึง การจดจำวัตถุ และการประมั่วผลภาพ 3 มิติ&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-level vision&lt;/strong&gt; − จะมีการอธิบาย แนวคิดของภาพ เช่น กิจกรรม ความตั้งใจ และพฤติกรรม&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;




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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install opencv_python
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  สอนการอ่าน และ เขียนไฟล์ภาพ ด้วยฟังก์ชั่นของ &lt;strong&gt;OpenCV&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;imread()&lt;/code&gt;คือ ฟังก์ชั่นสำหรับการอ่านไฟล์ภาพ &lt;br&gt;
&lt;code&gt;imshow()&lt;/code&gt;คือ ฟังก์ชั่นสำหรับโชว์รูปภาพ ตัวรูปภาพจะมีขนาดเท่ากับ ไฟล์ต้นทาง&lt;br&gt;
&lt;code&gt;imwrite()&lt;/code&gt;คือ ฟังก์ชั่นสำหรับเขียนหรือ สร้างไฟล์ภาพ&lt;br&gt;
(รองรับสกุลไฟล์เช่น PNG, JPEG, JPG, TIFF เป็นต้น)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ตัวอย่าง&lt;/strong&gt; &lt;br&gt;
(ใช้ colab)&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;img = io.imread("/content/matty.jpg")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;อ่านไฟล์&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cv2_imshow(img)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;แสดงผลภาพ&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/khvvpp187rr7h6iog8jl.png)


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cv2.imwrite('save_newmatty.png'img)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;จะทำการเขียนไฟล์ ขึ้นมาใหม่(เป็นสกุลไฟล์อื่นได้) โดยชื่อ save_newmatty&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;True
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  จะแสดงผล True เมื่อเขียนไฟล์สำเร็จ
&lt;/h2&gt;
&lt;h2&gt;
  
  
  Color Space Conversion
&lt;/h2&gt;

&lt;p&gt;ใน OpenCV รูปภาพจะไม่ถูกจัดเก็บโดยใช้ค่าสีใน RGB ทั่วไป แต่ย้อนกลับแทน คือ BGR&lt;br&gt;
&lt;code&gt;cvtColor()&lt;/code&gt;&lt;br&gt;
ฟังก์ชันการแปลงสี สำหรับการแปลงรูปภาพจากรหัสสีหนึ่งไปเป็นรหัสสีอื่น&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ตัวอย่าง&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;ลงไลบรารี&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;img = cv2.imread("/content/matty.jpg")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;img_new = cv.cvtColor(img,cv.COLOR_BGR2RGB)
final_frame = cv.hconcat((img, img_new))
cv2_imshow(final_frame)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bbOt0zIT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6yame0ftkyl1nqxdtlqx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bbOt0zIT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6yame0ftkyl1nqxdtlqx.png" alt="Image description" width="800" height="394"&gt;&lt;/a&gt;&lt;br&gt;
จะเห็นว่าภาพแรกคือภาพ ค่าสี BGR ส่วนอีกภาพคือกลับเป็นRGB&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;img_gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
cv2_imshow(img_gray)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CCUaFQku--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rqyv9y6qb1n6s23v21s2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CCUaFQku--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rqyv9y6qb1n6s23v21s2.png" alt="Image description" width="645" height="365"&gt;&lt;/a&gt;&lt;br&gt;
เปลี่ยนเป็นค่าสี grayscale&lt;/p&gt;


&lt;h2&gt;
  
  
  Edge Detection
&lt;/h2&gt;

&lt;p&gt;หลังจากที่ได้เห็นภาพร่างคร่าวๆ แล้ว คนเราสามารถจดจำประเภทของวัตถุและท่าทางของพวกมันได้&lt;/p&gt;

&lt;p&gt;นั่นเป็นเหตุผลที่ Edge(เส้นขอบ/ขอบ) มีบทบาทสำคัญกับการประยุกต์ใช้ ใน Computer Vision&lt;/p&gt;

&lt;p&gt;OpenCV มีฟังก์ชันที่เรียบง่ายและมีประโยชน์ที่เรียกว่า &lt;code&gt;Canny()&lt;/code&gt; สำหรับการตรวจจับเส้นขอบ&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ตัวอย่าง&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;ลงไลบรารี&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cv2.imwrite('img_edge.jpg',cv2.Canny(img,200,300))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;เขียนไฟล์ใหม่ ที่เป็นรูปแบบ edge&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cv2_imshow(io.imread("/content/img_edge.jpg"))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;แสดงผลภาพดังกล่าว&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DN4lgKFD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fk2vfxkidow1xkahgqme.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DN4lgKFD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fk2vfxkidow1xkahgqme.png" alt="Image description" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Face Detection
&lt;/h2&gt;

&lt;p&gt;การตรวจจับใบหน้าเป็นอีกหนึ่งเทคโนโลยี ที่น่าทึ่งของ Computer Vision ซึ่งตัว OpenCv จะมีฟังก์ชั้นในเรื่องของการตรวจจับใบหน้าอยู่ด้วย เรียกว่า  Haar cascade classifier&lt;br&gt;
Haar Cascade Data&lt;/p&gt;

&lt;p&gt;เราต้องการ ข้อมูล data เพื่อใช้ Haar Cascade Classifier ไฟล์ cascade&lt;br&gt;
จำเป็นที่จะต้องติดตั้งไฟล์ haarcascade_frontalface_default.xml&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ตัวอย่าง&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;ลงไลบรารี&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;base_image = cv2.imread('matty.jpg')
grey = cv2.cvtColor(base_image, cv2.COLOR_BGR2GRAY)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;ลองเรียกรูปภาพ และ เปลี่ยนค่าสี&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


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

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rYC9EhnE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/he27dtfh2xr5srqj927b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rYC9EhnE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/he27dtfh2xr5srqj927b.png" alt="Image description" width="742" height="622"&gt;&lt;/a&gt;&lt;br&gt;
ความแม่นยำมาก น้อย อยู่ที่สูตรคำนวณและ ภาพต้นฉบับด้วย&lt;/p&gt;


&lt;h2&gt;
  
  
  Eye Detection
&lt;/h2&gt;

&lt;p&gt;การตรวจจับดวงตา ก็เป็นอีกเทคโนโลยีนึงที่ มาใน haarcascade&lt;br&gt;
ซึ่งจำเป็นต้องติดตั้งไฟล์ haarcascade_eye.xml&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ตัวอย่าง&lt;/strong&gt;&lt;br&gt;
(ใช้ไลบรารี เดิม)&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GO_Mp6oZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r75pnq2hcu4qe8lntk65.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GO_Mp6oZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r75pnq2hcu4qe8lntk65.png" alt="Image description" width="708" height="626"&gt;&lt;/a&gt;&lt;br&gt;
แสดงผล&lt;/p&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://colab.research.google.com/github/computationalcore/introduction-to-opencv/blob/master/notebooks/4-Cascade_classification.ipynb" rel="noopener noreferrer"&gt;
      colab.research.google.com
    &lt;/a&gt;
&lt;/div&gt;



&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://www.tutorialspoint.com/artificial_intelligence_with_python/artificial_intelligence_with_python_computer_vision.htm" rel="noopener noreferrer"&gt;
      tutorialspoint.com
    &lt;/a&gt;
&lt;/div&gt;



&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://colab.research.google.com/github/computationalcore/introduction-to-opencv/blob/master/notebooks/1-Fundamentals.ipynb" rel="noopener noreferrer"&gt;
      colab.research.google.com
    &lt;/a&gt;
&lt;/div&gt;



&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.ultimatepython.co/post/face-detection-opencv-python" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--RohS4HDC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://static.wixstatic.com/media/82eb49_0574a67f907a42c8877606904f57fc87%7Emv2.png/v1/fill/w_1600%2Ch_900%2Cal_c/82eb49_0574a67f907a42c8877606904f57fc87%7Emv2.png" height="450" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.ultimatepython.co/post/face-detection-opencv-python" rel="noopener noreferrer" class="c-link"&gt;
          ตรวจจับใบหน้า ใน 11 บรรทัด Python Face Detection
        &lt;/a&gt;
      &lt;/h2&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--tHk4yNAA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://static.wixstatic.com/media/82eb49_8a6a0383b4e94a1fa01383efaab35bfb%257Emv2.png/v1/fill/w_32%252Ch_32%252Clg_1%252Cusm_0.66_1.00_0.01/82eb49_8a6a0383b4e94a1fa01383efaab35bfb%257Emv2.png" width="32" height="32"&gt;
        ultimatepython.co
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;br&gt;
&lt;/blockquote&gt;

</description>
      <category>beginners</category>
      <category>python</category>
      <category>tutorial</category>
      <category>thai</category>
    </item>
  </channel>
</rss>
