ใ€Python/OpenCVใ€‘cv2.VideoCaptureใงๅ‹•็”ปใƒ•ใ‚กใ‚คใƒซใƒปWebใ‚ซใƒกใƒฉๆ˜ ๅƒใฎ่ชญใฟ่พผใฟใจๅ†็”Ÿ

Python็‰ˆOpenCVใงๅ‹•็”ปใƒ•ใ‚กใ‚คใƒซใƒปใ‚ซใƒกใƒฉใฎ่ชญใฟ่พผใ‚“ใง็”ป้ขใซๅ†็”Ÿใƒป่กจ็คบใ•ใ›ใ‚‹ๆ–นๆณ•ใ‚’ใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ไป˜ใใง่งฃ่ชฌใ—ใพใ™ใ€‚

ๅ‹•็”ปใƒ•ใ‚กใ‚คใƒซใฎ่ชญใฟ่พผใฟใจๅ†็”Ÿ(cv2.VideoCapture)

Python็‰ˆOpenCVใงใฏใ€cv2.VideoCapture()้–ขๆ•ฐใงๅ‹•็”ปใƒ•ใ‚กใ‚คใƒซใ‚’่ชญใฟ่พผใ‚€ใ“ใจใŒใงใใพใ™ใ€‚
FLVใ‚„MP4ใ€AVIใชใฉใซๅฏพๅฟœใ—ใฆใ„ใพใ™ใ€‚

ไปฅไธ‹ใฏใ€ๅ‹•็”ปใƒ•ใ‚กใ‚คใƒซ(MP4)ใ‚’่ชญใฟ่พผใ‚“ใง็”ป้ขใซ่กจ็คบใ•ใ›ใ‚‹ใƒ—ใƒญใ‚ฐใƒฉใƒ ใฎใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใงใ™ใ€‚


ใƒ‘ใƒฉใƒกใƒผใ‚ฟ ่ชฌๆ˜Ž
filepath ๅ‹•็”ปใƒ•ใ‚กใ‚คใƒซใฎใƒ‘ใ‚น
frame 1ใ‚ณใƒžๅˆ†ใฎใ‚ญใƒฃใƒ—ใƒใƒฃ็”ปๅƒ

VideoCaptureใ‚ฏใƒฉใ‚นใฏใ€ใ‚ซใƒกใƒฉใ‚‚ใ—ใใฏๅ‹•็”ปใƒ•ใ‚กใ‚คใƒซใ‹ใ‚‰็”ปๅƒใƒ‡ใƒผใ‚ฟใ‚’ๅ–ๅพ—ใ™ใ‚‹ใŸใ‚ใฎใ‚ฏใƒฉใ‚นใงใ™ใ€‚
ๅผ•ๆ•ฐใซใฏๅ‹•็”ปใƒ•ใ‚กใ‚คใƒซใฎใƒ‘ใ‚นใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚ใพใŸใ€ๅ‹•็”ปใ‚’่ชญใฟ่พผใ‚€ๅ ดๅˆใซๆœ€ไฝŽ้™ไฝฟ็”จใ™ใ‚‹ใƒกใ‚ฝใƒƒใƒ‰ใฏไปฅไธ‹ใฎ้€šใ‚Šใงใ™ใ€‚

ใƒกใ‚ฝใƒƒใƒ‰ ่ชฌๆ˜Ž
read() 1ใ‚ณใƒžๅˆ†ใฎใ‚ญใƒฃใƒ—ใƒใƒฃ็”ปๅƒใƒ‡ใƒผใ‚ฟใ‚’่ชญใฟ่พผใฟใพใ™๏ผˆๅพŒ่ฟฐใ™ใ‚‹ใ€ใ‚ญใƒฃใƒ—ใƒใƒฃใƒ‡ใƒใ‚คใ‚นใ‚’ใ‚ญใƒฃใƒ—ใƒใƒฃใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™๏ผ‰ใ€‚
isOpened() ๆญฃๅธธใซๅ‹•็”ปใƒ•ใ‚กใ‚คใƒซใ‚’่ชญใฟ่พผใ‚ใŸใ‹ใฏใƒกใ‚ฝใƒƒใƒ‰ใง็ขบ่ชใงใใพใ™๏ผˆๅ•้กŒใชใ‘ใ‚ŒใฐTrueใ‚’่ฟ”ใ™๏ผ‰ใ€‚
release() ๅ‹•็”ปใƒ•ใ‚กใ‚คใƒซใ‚’้–‰ใ˜ใพใ™๏ผˆๅพŒ่ฟฐใ™ใ‚‹ใ€ใ‚ญใƒฃใƒ—ใƒใƒฃใƒ‡ใƒใ‚คใ‚นใ‚’ใ‚ญใƒฃใƒ—ใƒใƒฃใ—ใฆใ„ใ‚‹ๅ ดๅˆใฏใ‚ญใƒฃใƒ—ใƒใƒฃใƒ‡ใƒใ‚คใ‚นใ‚’็ต‚ไบ†ใ•ใ›ใพใ™๏ผ‰ใ€‚

ๅ‹•็”ปใ‹ใ‚‰้€ฃ็ถš็š„ใซ1ใ‚ณใƒžๅˆ†ใฎใ‚ญใƒฃใƒ—ใƒใƒฃ็”ปๅƒใ‚’ๅ–ๅพ—ใ™ใ‚‹ใŸใ‚ใ€whileๅ†…ใงcapture.read() ใ‚’ๅ‘ผใณๅ‡บใ—ใฆ็นฐใ‚Š่ฟ”ใ—ๅ‡ฆ็†ใ‚’่กŒใ„ใพใ™ใ€‚ๅ–ๅพ—ใ—ใŸ1ใ‚ณใƒžใฎ็”ปๅƒใƒ‡ใƒผใ‚ฟใฏใ€ๅค‰ๆ•ฐframeใซๆ ผ็ดใ•ใ‚Œใฆใ„ใพใ™ใ€‚
ใใ—ใฆใ€cv2.imshow()้–ขๆ•ฐใงใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใซ1ใ‚ณใƒžใฎ็”ปๅƒใƒ‡ใƒผใ‚ฟใ‚’่กจ็คบใ—ใพใ™ใ€‚

ใพใŸใ€whileๅ†…ใงใฏใ€ใƒซใƒผใƒ—ใ‚’ๆญขใ‚ใ‚‹ใŸใ‚ใซใ€Œqใ€ใ‚ญใƒผใŒใ‚ฟใ‚คใƒ—ใ•ใ‚ŒใŸใ‚‰ break ใ™ใ‚‹ใŸใ‚ใฎ if ๆ–‡ใ‚’่จ˜่ฟฐใ—ใฆใ„ใพใ™ใ€‚
while ใ‚’ๆŠœใ‘ใ‚‹ใจใ€ๅ‡ฆ็†ใ‚’็ต‚ไบ†ใ•ใ›ใ‚‹ใŸใ‚ใซ VideoCapture ใ‚’็ต‚ไบ†ใ—ใฆใ€้–‹ใ„ใŸใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใ‚‚็ต‚ไบ†ใ•ใ›ใพใ™ใ€‚

่งฃ่ชฌๅ‹•็”ป

ๆœฌใƒšใƒผใ‚ธใฎๅ†…ๅฎนใฏไปฅไธ‹ๅ‹•็”ปใง่งฃ่ชฌใ—ใฆใ„ใพใ™ใ€‚ไฝตใ›ใฆใ”ๆดป็”จใใ ใ•ใ„ใ€‚

Webใ‚ซใƒกใƒฉใฎ่ชญใฟ่พผใฟใจ่กจ็คบ(cv2.VideoCapture)

ใ‚ณใƒณใƒ”ใƒฅใƒผใ‚ฟใซๆŽฅ็ถšใ•ใ‚Œใฆใ„ใ‚‹ใ‚ซใƒกใƒฉ๏ผˆใƒŽใƒผใƒˆPCใซๆญ่ผ‰ใ•ใ‚Œใฆใ„ใ‚‹ใƒ•ใƒญใƒณใƒˆใ‚ซใƒกใƒฉใ‚„USBใ‚ซใƒกใƒฉใชใฉ๏ผ‰ใซใ‚ขใ‚ฏใ‚ปใ‚นใ—ใฆๆ˜ ๅƒใ‚’ๅ–ๅพ—ใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚
ใใฎๅ ดๅˆใฏใ€cv2.VideoCapture()้–ขๆ•ฐใฎๅผ•ๆ•ฐใซใฏ็•ชๅทใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚
ใ‚ณใƒณใƒ”ใƒฅใƒผใ‚ฟใซใ‚ซใƒกใƒฉใŒ1ๅฐใ ใ‘ใ—ใ‹ๆŽฅ็ถšใ•ใ‚Œใฆใ„ใชใ„ๅ ดๅˆใซใฏใ€Œ0ใ€ใ‚’ๆŒ‡ๅฎšใ—ใ€่ค‡ๆ•ฐใฎใ‚ซใƒกใƒฉใŒๆŽฅ็ถšใ•ใ‚Œใฆใ„ใ‚‹ๅ ดๅˆใฏใ€Œ1ใ€ใชใฉใฎ็•ชๅทใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚
็’ฐๅขƒใซใ‚ˆใฃใฆใฏใ€๏ผ‘ๅฐใฎใ‚ซใƒกใƒฉใ—ใ‹ๆŽฅ็ถšใ•ใ‚Œใฆใ„ใชใใฆใ‚‚็•ชๅทใŒใ€Œ1ใ€ใ ใฃใŸใ‚Šใ™ใ‚‹ใฎใงใ€ใ†ใพใใ„ใ‹ใชใ„ๅ ดๅˆใฏๆ•ฐๅ€คใ‚’๏ผ‘ใšใคใ‚ใ’ใฆ่ฉฆใ—ใฆใฟใฆใใ ใ•ใ„ใ€‚

ไปฅไธ‹ใฏใ€Webใ‚ซใƒกใƒฉๆ˜ ๅƒใ‚’ๅ–ๅพ—ใ—ใฆ็”ป้ขใซ่กจ็คบใ•ใ›ใ‚‹ใ‚ตใƒณใƒ—ใƒซใƒ—ใƒญใ‚ฐใƒฉใƒ ใฎใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใงใ™ใ€‚


ๅ‹•็”ปๅƒๅ‡ฆ็†ใฎๆ–นๆณ•

ใ“ใ‚Œใพใงๅ‹•็”ปใƒ•ใ‚กใ‚คใƒซใ‚„Webใ‚ซใƒกใƒฉใฎๆ˜ ๅƒใ‚’็”ป้ขใซ่กจ็คบใ•ใ›ใฆใใพใ—ใŸใ€‚
ๅ‹•็”ปใฎ1ใƒ•ใƒฌใƒผใƒ (1ใ‚ณใƒž)ใฏ็”ปๅƒใƒ‡ใƒผใ‚ฟ(NumPy้…ๅˆ—)ใงใ‚ใ‚Šใ€ๅค‰ๆ•ฐframeใซๆ ผ็ดใ•ใ‚Œใฆใ„ใพใ™๏ผˆ่‰ฒ็ฉบ้–“ใฏRGB๏ผ‰ใ€‚
ใ‚ˆใฃใฆใ€1ใƒ•ใƒฌใƒผใƒ ใšใคใ“ใ‚Œใพใงใฎใ‚ˆใ†ใซ็”ปๅƒๅ‡ฆ็†ใ‚’ใ‹ใ‘ใ‚Œใฐๅ‹•็”ปๅƒๅ‡ฆ็†ใ‚’่กŒใ†ใ“ใจใŒใงใใพใ™ใ€‚

ใ‚ตใƒณใƒ—ใƒซใ‚ณใƒผใƒ‰

ไปฅไธ‹ใฏใ€1ใƒ•ใƒฌใƒผใƒ (frame)ใšใคcv2.cvtColor()้–ขๆ•ฐใงใ‚ฐใƒฌใƒผใ‚นใ‚ฑใƒผใƒซๅค‰ๆ›ใ•ใ›ใ‚‹ใ‚ตใƒณใƒ—ใƒซใƒ—ใƒญใ‚ฐใƒฉใƒ ใฎใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใงใ™๏ผ‰ใ€‚


ใ‚ซใƒกใƒฉใฎๆ˜ ๅƒใ‚’ใƒชใ‚ขใƒซใ‚ฟใ‚คใƒ ใงๅ‡ฆ็†ใ—ใฆ่กจ็คบ๏ผˆๅ†็”Ÿ๏ผ‰ใ™ใ‚‹ๅ ดๅˆใ‚‚ใ€ใ“ใฎใ‚ˆใ†ใซread()ใจimshow()ใฎ้–“ใซไปปๆ„ใฎๅ‡ฆ็†ใ‚’ๅŠ ใˆใพใ™ใ€‚
ใŸใ ใ—ใ€1ใƒ•ใƒฌใƒผใƒ ใ‚’ๅ–ๅพ—ใƒปๅ‡ฆ็†ใƒป่กจ็คบใ™ใ‚‹ๆ™‚้–“ใŒspf๏ผˆ๏ผ‘/fps๏ผ‰ใ‚’ไธŠๅ›žใฃใฆใ—ใพใ†ใจๅ‡ฆ็†่ฝใกใ—ใพใ™ใ€‚
ไพ‹ใˆใฐใ€30fpsใฎใ‚ซใƒกใƒฉๆ˜ ๅƒใงใƒชใ‚ขใƒซใ‚ฟใ‚คใƒ ๅ‡ฆ็†ใ™ใ‚‹ๅ ดๅˆใ€sfp=1/30=0.033ใชใฎใงใ€๏ผ‘ใƒ•ใƒฌใƒผใƒ ใซใ‹ใ‘ใ‚‹ๅ‡ฆ็†ๆ™‚้–“ใฏใŠใŠใ‚ˆใ30msไปฅๅ†…ใซๅŽใ‚ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚

ๅ‹•็”ปใฎใ‚ตใ‚คใ‚บใ€FPSใ€ใƒ•ใƒฌใƒผใƒ ๆ•ฐใชใฉใฎๅ–ๅพ—ใƒป่จญๅฎš

VideoCaptureใ‚ฏใƒฉใ‚นใฎget()ใƒกใ‚ฝใƒƒใƒ‰ใงใ€่ชญใฟ่พผใ‚“ใ ๅ‹•็”ปใฎใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃ๏ผˆใ‚ตใ‚คใ‚บใ€FPSใ€ใƒ•ใƒฌใƒผใƒ ๆ•ฐใชใฉ๏ผ‰ใ‚’ๅ–ๅพ—ใงใใพใ™ใ€‚
ๅ†็”Ÿๆ™‚้–“๏ผˆ็ง’ๆ•ฐ๏ผ‰ใฏ็ทใƒ•ใƒฌใƒผใƒ ๆ•ฐ / FPSใง่จˆ็ฎ—ใงใใพใ™ใ€‚


VideoCaptureใ‚ฏใƒฉใ‚นใฎset()ใƒกใ‚ฝใƒƒใƒ‰ใ‚’ไฝฟใ†ใจใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใ‚’ๆŒ‡ๅฎšใ—ใฆๅ€คใ‚’ๅค‰ๆ›ดใงใใพใ™ใ€‚
็ฌฌไธ€ๅผ•ๆ•ฐใซใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใ€็ฌฌไบŒๅผ•ๆ•ฐใซๅค‰ๆ›ดๅพŒใฎๅ€คใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚
ใŸใ ใ—ใ€ใ™ในใฆใฎใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใŒๅค‰ๆ›ดใงใใ‚‹ใ‚ใ‘ใงใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚


ๅ‹•็”ปใƒ•ใ‚กใ‚คใƒซใฎๅ ดๅˆใฏๅค‰ๆ›ดใงใใชใ„ใŸใ‚set()ใƒกใ‚ฝใƒƒใƒ‰ใงๆŒ‡ๅฎšใ—ใฆใ‚‚FalseใŒ่ฟ”ใ•ใ‚Œใพใ™ใ€‚
ใ‚ซใƒกใƒฉใฎๅ ดๅˆใฏCๅค‰ๆ›ดๅฏ่ƒฝใงset()ใƒกใ‚ฝใƒƒใƒ‰ใŒTrueใ‚’่ฟ”ใ—ใพใ™ใŒใ€ใ‚ซใƒกใƒฉใŒๅฏพๅฟœใ—ใฆใ„ใชใ„FPSใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใจๅ€คใฏใใฎใจใŠใ‚Šใซๅค‰ๆ›ดใ•ใ‚Œใชใ„ใŸใ‚ๆณจๆ„ใŒๅฟ…่ฆใงใ™ใ€‚

ใพใŸใ€ๅ–ๅพ—ใ™ใ‚‹ใƒ•ใƒฌใƒผใƒ ใฎ็พๅœจไฝ็ฝฎใ‚’ไปปๆ„ใซ็งปๅ‹•ใ•ใ›ใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚


ใŸใ ใ—ใ€็ทใƒ•ใƒฌใƒผใƒ ๆ•ฐไปฅไธŠใฎๅ€คใ‚’็พๅœจไฝ็ฝฎใซ่จญๅฎšใ™ใ‚‹ใจใใ‚ŒไปฅไธŠใฎใƒ•ใƒฌใƒผใƒ ใฏๅญ˜ๅœจใ—ใชใ„ใŸใ‚ใ€read()ใฏFalseใจNoneใ‚’่ฟ”ใ—ใพใ™ใ€‚

้–ข้€ฃใƒšใƒผใ‚ธ

PythonใจOpenCVใง็”ปๅƒๅ‡ฆ็†่ถ…ๅ…ฅ้–€
Python็‰ˆOpenCVใง็”ปๅƒๅ‡ฆ็†ใƒ—ใƒญใ‚ฐใƒฉใƒŸใƒณใ‚ฐใ‚’่กŒใ†ๆ–นๆณ•ใ‚’ๅ…ฅ้–€่€…ๅ‘ใ‘ใซใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ไป˜ใใง่งฃ่ชฌใ™ใ‚‹ใƒšใƒผใ‚ธใงใ™ใ€‚
ใ“ใฎ่จ˜ไบ‹ใ‚’ๆ›ธใ„ใŸไบบ
่ฅฟไฝๆŠ€็ ”

ใƒ—ใƒญใ‚ฐใƒฉใƒŸใƒณใ‚ฐ่จ€่ชžใ€ŒPythonใ€ใ‚’็ ”็ฉถใ€ไป•ไบ‹ใ€่ถฃๅ‘ณใงใƒ‡ใƒผใ‚ฟๅˆ†ๆžใ‚„ไฝœๆฅญ่‡ชๅ‹•ๅŒ–ใชใฉใซๆดป็”จใ—ใฆใใŸใƒŽใ‚ฆใƒใ‚ฆใ‚’ๆƒ…ๅ ฑ็™บไฟกใ—ใฆใ„ใพใ™ใ€‚
็ญ†่€…ใฎ่ฉณใ—ใ„ใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซใ‚„ใŠๅ•ๅˆใ›ใฏใ“ใกใ‚‰ใฎใƒšใƒผใ‚ธใพใงใ€‚
โ‡“Youtubeใ‚„X๏ผˆๆ—งTwitter๏ผ‰ใงใ‚‚ๆƒ…ๅ ฑ็™บไฟกไธญใงใ™๏ผ

่ฅฟไฝๆŠ€็ ”ใ‚’ใƒ•ใ‚ฉใƒญใƒผใ™ใ‚‹
OpenCV

ใ‚ณใƒกใƒณใƒˆ