{"id":6356,"date":"2025-02-05T16:07:48","date_gmt":"2025-02-05T07:07:48","guid":{"rendered":"https:\/\/blog.smartlight.co.jp\/?p=6356"},"modified":"2025-02-05T16:23:12","modified_gmt":"2025-02-05T07:23:12","slug":"pc%e3%82%ab%e3%83%a1%e3%83%a9%e3%81%aertsp%e6%98%a0%e5%83%8f%e3%82%92%e9%aa%a8%e6%a0%bc%e6%8e%a8%e5%ae%9a%e3%81%99%e3%82%8b","status":"publish","type":"post","link":"https:\/\/blog.smartlight.co.jp\/?p=6356","title":{"rendered":"PC\u30ab\u30e1\u30e9\u306eRTSP\u6620\u50cf\u3092\u9aa8\u683c\u63a8\u5b9a\u3059\u308b"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><strong>RTSP\u6620\u50cf\u3068\u306f<\/strong><\/h2>\n\n\n\n<p>RTSP\uff08Real Time Streaming Protocol\uff09\u6620\u50cf\u3068\u306f\u3001\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u7d4c\u7531\u3067\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306b\u52d5\u753b\u3092\u914d\u4fe1\u30fb\u518d\u751f\u3059\u308b\u305f\u3081\u306e\u30d7\u30ed\u30c8\u30b3\u30eb\u3092\u5229\u7528\u3057\u305f\u6620\u50cf\u306e\u3053\u3068\u3067\u3059\u3002\u4e3b\u306b\u76e3\u8996\u30ab\u30e1\u30e9\u3084\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u30b5\u30fc\u30d3\u30b9\u3067\u4f7f\u7528\u3055\u308c\u3001\u4f4e\u9045\u5ef6\u3067\u6620\u50cf\u3092\u9001\u53d7\u4fe1\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u9aa8\u683c\u63a8\u5b9a\u3068\u306f<\/strong><\/h2>\n\n\n\n<p>\u9aa8\u683c\u63a8\u5b9a\uff08Pose Estimation\uff09\u3068\u306f\u3001\u753b\u50cf\u3084\u52d5\u753b\u304b\u3089\u4eba\u306e\u95a2\u7bc0\u306e\u4f4d\u7f6e\u3092\u63a8\u5b9a\u3057\u3001\u4f53\u306e\u59ff\u52e2\u3092\u5206\u6790\u3059\u308b\u6280\u8853\u3067\u3059\u3002AI\u3084\u6a5f\u68b0\u5b66\u7fd2\u3092\u6d3b\u7528\u3057\u3001\u80a9\u30fb\u8098\u30fb\u819d\u306a\u3069\u306e\u95a2\u7bc0\u306e\u5ea7\u6a19\u3092\u7279\u5b9a\u3057\u3001\u59ff\u52e2\u3092\u8a8d\u8b58\u3057\u307e\u3059\u3002\u30b9\u30dd\u30fc\u30c4\u306e\u52d5\u4f5c\u89e3\u6790\u3084\u30b2\u30fc\u30e0\u3001\u30d5\u30a3\u30c3\u30c8\u30cd\u30b9\u30a2\u30d7\u30ea\u306a\u3069\u3001\u3055\u307e\u3056\u307e\u306a\u5206\u91ce\u3067\u4f7f\u308f\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"660\" src=\"https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2025\/02\/image-28-1024x660.png\" alt=\"\" class=\"wp-image-6396\" srcset=\"https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2025\/02\/image-28-1024x660.png 1024w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2025\/02\/image-28-300x193.png 300w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2025\/02\/image-28-768x495.png 768w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2025\/02\/image-28-1536x991.png 1536w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2025\/02\/image-28-2048x1321.png 2048w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2025\/02\/image-28-1024x660.png 856w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-left\">\u753b\u50cf\u5f15\u7528\u5143 : <a href=\"https:\/\/www.globalwalkers.co.jp\/3d-pose-estimation\/\">\u59ff\u52e2\u63a8\u5b9a\u6280\u8853 &#8211; Global Walkers<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Visual Studio Code\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"432\" src=\"https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2025\/02\/image-10.png\" alt=\"\" class=\"wp-image-6394\" \/><\/figure>\n\n\n\n<p><a href=\"https:\/\/code.visualstudio.com\/download\">https:\/\/code.visualstudio.com\/download<\/a><br>Local Disk(C:)\u5185\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<br>Local Disk(C:)&gt;test&gt;run.py<\/p>\n\n\n\n<p>C\u30c9\u30e9\u30a4\u30d6\u306b\u4fdd\u5b58\u3057\u306a\u3044\u5834\u5408\u3001\u6b63\u5e38\u306b\u52d5\u304b\u306a\u3044\u3053\u3068\u304c\u3042\u308b\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u74b0\u5883\u3092\u3064\u304f\u308b<\/strong><\/h2>\n\n\n\n<p>VScode\u306e\u30bf\u30fc\u30df\u30ca\u30eb\u306b\u3066<\/p>\n\n\n\n<p><strong>\u4eee\u60f3\u74b0\u5883\u306e\u4f5c\u6210<\/strong><br>py -3.10 -m venv venv<\/p>\n\n\n\n<p><strong>\u4eee\u60f3\u74b0\u5883\u3092\u6709\u52b9\u5316<\/strong><br>(PowerShell \u306e\u5834\u5408)<br>venvScripts\\Activate<\/p>\n\n\n\n<p>(\u30b3\u30de\u30f3\u30c9\u30d7\u30ed\u30f3\u30d7\u30c8\u306e\u5834\u5408)<br>venv\\Scripts\\activate.bat<\/p>\n\n\n\n<p>(Git Bash or WSL \u306e\u5834\u5408)<br>source venv\/bin\/activate<\/p>\n\n\n\n<p><strong>\u5fc5\u8981\u306a\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/strong><\/p>\n\n\n\n<p>\u30fbMediaPipe \u3092\u4f7f\u3063\u305f\u9aa8\u683c\u63a8\u5b9a<br>pip install opencv-python mediapipe numpy matplotlib<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u4f7f\u7528\u53ef\u80fd\u306a\u30ab\u30e1\u30e9\u3092\u63a2\u3059<\/strong><\/h2>\n\n\n\n<p>Visual Studio Code\u5185\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304d\u30b3\u30fc\u30c9\u3092\u66f8\u3044\u3066\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u30b3\u30fc\u30c9<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">import cv2\n\n<span class=\"hljs-keyword\">for<\/span> i in range(<span class=\"hljs-number\">10<\/span>):  <span class=\"hljs-comment\"># 0\uff5e9\u306eID\u3092\u8a66\u3059<\/span>\n    cap = cv2.VideoCapture(i)\n    <span class=\"hljs-keyword\">if<\/span> cap.isOpened():\n        <span class=\"hljs-keyword\">print<\/span>(f<span class=\"hljs-string\">\"\u30ab\u30e1\u30e9 {i} \u304c\u4f7f\u7528\u53ef\u80fd\"<\/span>)\n        cap.release()\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>\u30c7\u30d0\u30c3\u30af<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">PS C:\\test&gt; python .\/search.py \n\u30ab\u30e1\u30e9 0 \u304c\u4f7f\u7528\u53ef\u80fd\n\u30ab\u30e1\u30e9 1 \u304c\u4f7f\u7528\u53ef\u80fd\n<\/code><\/span><\/pre>\n\n\n<p><\/p>\n\n\n\n<p>VScode\u5185\u306e\u30bf\u30fc\u30df\u30ca\u30eb\u306b\u3066\u30b3\u30fc\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068<br>\u30ab\u30e1\u30e90\u304cPC\u5185\u8535\u306e\u30a4\u30f3\u30ab\u30e1\u30e9\u3067\u3001\u30ab\u30e1\u30e91\u304cPC\u5185\u8535\u306e\u30a2\u30a6\u30c8\u30ab\u30e1\u30e9\u3060\u3063\u305f\u3002<br>\u4eca\u56de\u306f\u30a4\u30f3\u30ab\u30e1\u30e9\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u3001\u5024\u3092(0)\u306b\u8a2d\u5b9a\u3059\u308b\u3002<br><br>search.py\u3067\u4fdd\u5b58<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u9aa8\u683c\u63a8\u5b9a \u672c\u6587\u30b3\u30fc\u30c9<\/strong><\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">import cv2\nimport mediapipe <span class=\"hljs-keyword\">as<\/span> mp\n \n<span class=\"hljs-comment\"># MediaPipe Pose\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/span>\nmp_pose = mp.solutions.pose\npose = mp_pose.Pose()\nmp_draw = mp.solutions.drawing_utils\n \n \n<span class=\"hljs-comment\"># RTSP\u30b9\u30c8\u30ea\u30fc\u30e0\u306e\u30ad\u30e3\u30d7\u30c1\u30e3<\/span>\ncap = cv2.VideoCapture(<span class=\"hljs-number\">0<\/span>) <span class=\"hljs-comment\">#0\u304c\u30a4\u30f3\u30ab\u30e1\u30e9,1\u304c\u30a2\u30a6\u30c8\u30ab\u30e1\u30e9<\/span>\n\n<span class=\"hljs-keyword\">if<\/span> not cap.isOpened():\n    <span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"\u30a8\u30e9\u30fc\uff1aRTSP\u30b9\u30c8\u30ea\u30fc\u30e0\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f\u3002\"<\/span>)\n    <span class=\"hljs-keyword\">exit<\/span>()\n \n<span class=\"hljs-keyword\">while<\/span> <span class=\"hljs-keyword\">True<\/span>:\n    ret, frame = cap.read()\n    <span class=\"hljs-keyword\">if<\/span> not ret:\n        <span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"\u30a8\u30e9\u30fc\uff1aRTSP\u30b9\u30c8\u30ea\u30fc\u30e0\u304b\u3089\u30d5\u30ec\u30fc\u30e0\u3092\u8aad\u307f\u53d6\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002\"<\/span>)\n        <span class=\"hljs-keyword\">break<\/span>\n \n    <span class=\"hljs-comment\"># OpenCV\u306fBGR\u3001MediaPipe\u306fRGB\u306e\u305f\u3081\u5909\u63db<\/span>\n    rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)\n     \n    <span class=\"hljs-comment\"># \u9aa8\u683c\u63a8\u5b9a<\/span>\n    result = pose.process(rgb_frame)\n \n    <span class=\"hljs-comment\"># \u7d50\u679c\u306e\u63cf\u753b<\/span>\n    <span class=\"hljs-keyword\">if<\/span> result.pose_landmarks:\n        mp_draw.draw_landmarks(frame, result.pose_landmarks, mp_pose.POSE_CONNECTIONS)\n\n        <span class=\"hljs-comment\"># \u53f3\u624b\u9996\u306e\u5ea7\u6a19\u3092\u53d6\u5f97\uff08MediaPipe\u306e\u30e9\u30f3\u30c9\u30de\u30fc\u30af\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 16\uff09<\/span>\n        right_wrist = result.pose_landmarks.landmark&#91;mp_pose.PoseLandmark.RIGHT_WRIST]\n        nose = result.pose_landmarks.landmark&#91;mp_pose.PoseLandmark.NOSE]  <span class=\"hljs-comment\"># \u9854\u306e\u4f4d\u7f6e\u3092\u53d6\u5f97<\/span>\n        h, w, _ = frame.shape  <span class=\"hljs-comment\"># \u30d5\u30ec\u30fc\u30e0\u306e\u30b5\u30a4\u30ba\u53d6\u5f97<\/span>\n        x, y = int(right_wrist.x * w), int(right_wrist.y * h)  <span class=\"hljs-comment\"># \u753b\u50cf\u5ea7\u6a19\u306b\u5909\u63db<\/span>\n        nose_x, nose_y = int(nose.x * w), int(nose.y * h)  <span class=\"hljs-comment\"># \u9854\u306e\u4e0a\u306b\u8868\u793a\u3059\u308b\u305f\u3081\u306e\u5ea7\u6a19\u53d6\u5f97<\/span>\n \n        <span class=\"hljs-comment\"># \u5ea7\u6a19\u3092\u9854\u306e\u4e0a\u306b\u8868\u793a<\/span>\n        cv2.putText(frame, f<span class=\"hljs-string\">'Right Wrist: ({x}, {y})'<\/span>, (nose_x, max(nose_y - <span class=\"hljs-number\">30<\/span>, <span class=\"hljs-number\">30<\/span>)),\n                    cv2.FONT_HERSHEY_SIMPLEX, <span class=\"hljs-number\">1<\/span>, (<span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">255<\/span>, <span class=\"hljs-number\">0<\/span>), <span class=\"hljs-number\">2<\/span>, cv2.LINE_AA)\n \n    cv2.imshow(<span class=\"hljs-string\">'Pose Estimation'<\/span>, frame)\n \n    <span class=\"hljs-keyword\">if<\/span> cv2.waitKey(<span class=\"hljs-number\">1<\/span>) &amp; <span class=\"hljs-number\">0xFF<\/span> == ord(<span class=\"hljs-string\">'q'<\/span>):\n        <span class=\"hljs-keyword\">break<\/span>\n \ncap.release()\ncv2.destroyAllWindows()<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>run.py \u3067\u4fdd\u5b58<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u5b9f\u884c<\/strong><\/h2>\n\n\n\n<p>VScode\u4e0b\u90e8\u306e\u30bf\u30fc\u30df\u30ca\u30eb\u306b\u3066\u5b9f\u884c\u3059\u308b\u3002 python .\/run.py<br>\u5b9f\u884c\u3092\u3059\u308b\u3068\u81ea\u52d5\u3067Pose Estimation\u304c\u958b\u304d\u3001\u6620\u50cf\u304c\u6620\u3055\u308c\u305f\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"416\" src=\"https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2025\/02\/image-27-1024x416.png\" alt=\"\" class=\"wp-image-6366\" srcset=\"https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2025\/02\/image-27-1024x416.png 1024w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2025\/02\/image-27-300x122.png 300w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2025\/02\/image-27-768x312.png 768w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2025\/02\/image-27.png 1138w, https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2025\/02\/image-27-1024x416.png 856w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>RTSP\u6620\u50cf\u3068\u306f RTSP\uff08Real Time Streaming Protocol\uff09\u6620\u50cf\u3068\u306f\u3001\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u7d4c\u7531\u3067\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306b\u52d5\u753b\u3092\u914d\u4fe1\u30fb\u518d\u751f\u3059\u308b\u305f\u3081\u306e\u30d7\u30ed\u30c8\u30b3\u30eb\u3092\u5229\u7528\u3057\u305f\u6620\u50cf\u306e\u3053\u3068\u3067\u3059\u3002\u4e3b\u306b\u76e3\u8996\u30ab\u30e1\u30e9\u3084\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0<\/p>\n","protected":false},"author":18,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jin_ogp_image_url":"","_jin_last_featured_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3],"tags":[],"class_list":["post-6356","post","type-post","status-publish","format-standard","hentry","category-intern"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=\/wp\/v2\/posts\/6356","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=\/wp\/v2\/users\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6356"}],"version-history":[{"count":38,"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=\/wp\/v2\/posts\/6356\/revisions"}],"predecessor-version":[{"id":6419,"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=\/wp\/v2\/posts\/6356\/revisions\/6419"}],"wp:attachment":[{"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6356"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6356"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6356"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}