{"id":1560,"date":"2025-07-25T11:18:27","date_gmt":"2025-07-25T02:18:27","guid":{"rendered":"https:\/\/beeknowledge.co.jp\/?p=1560"},"modified":"2025-07-25T11:18:28","modified_gmt":"2025-07-25T02:18:28","slug":"python%e3%81%a7%e6%98%a0%e5%83%8f%e3%81%ae%e9%a1%94%e3%81%ab%e8%87%aa%e5%8b%95%e3%83%a2%e3%82%b6%e3%82%a4%e3%82%af%e5%87%a6%e7%90%86%ef%bc%9amediapipe-vs-dnn%ef%bc%88resnet-ssd%ef%bc%89%ef%bc%8bgpu","status":"publish","type":"post","link":"https:\/\/beeknowledge.co.jp\/?p=1560","title":{"rendered":"Python\u3067\u6620\u50cf\u306e\u9854\u306b\u81ea\u52d5\u30e2\u30b6\u30a4\u30af\u51e6\u7406\uff1aMediaPipe vs DNN\uff08ResNet SSD\uff09\uff0bGPU\u9ad8\u901f\u5316\u3000part2"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"ja\">\n<head>\n  <meta charset=\"UTF-8\">\n  <title>Python\u3067\u6620\u50cf\u304b\u3089\u9854\u3092\u691c\u51fa\u3057\u30e2\u30b6\u30a4\u30af\u51e6\u7406\uff1aMediaPipe\u7248\u3068DNN(CUDA)\u9ad8\u901f\u5316\u306e\u6bd4\u8f03<\/title>\n  <style>\n    body { font-family: \"Segoe UI\", \"Hiragino Kaku Gothic ProN\", Meiryo, sans-serif; line-height: 1.8; padding: 2em; background: #f9f9f9; color: #333; }\n    h1, h2, h3 { color: #2c3e50; }\n    pre { background: #f4f4f4; padding: 1em; overflow-x: auto; border-left: 4px solid #3498db; }\n    code { font-family: Consolas, monospace; }\n    table { border-collapse: collapse; width: 100%; margin: 1em 0; }\n    th, td { border: 1px solid #ccc; padding: 0.5em; text-align: center; }\n    th { background: #eee; }\n  <\/style>\n<\/head>\n<body>\n\n\n\n<p>\u6620\u50cf\u30c7\u30fc\u30bf\u304b\u3089\u4eba\u7269\u306e\u9854\u3092\u691c\u51fa\u3057\u3066\u30e2\u30b6\u30a4\u30af\u3092\u304b\u3051\u308b\u6280\u8853\u306f\u3001\u76e3\u8996\u30fb\u696d\u52d9\u8a18\u9332\u30fb\u6559\u80b2\u73fe\u5834\u306a\u3069\u3067<strong>\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc\u4fdd\u8b77<\/strong>\u306e\u305f\u3081\u306b\u975e\u5e38\u306b\u91cd\u8981\u3067\u3059\u3002\u672c\u8a18\u4e8b\u3067\u306f\u3001<\/p>\n\n<ul>\n  <li><strong>MediaPipe<\/strong>\u3092\u4f7f\u3063\u305f\u8efd\u91cf\u30fb\u9ad8\u901f\u306a\u9854\u691c\u51fa<\/li>\n  <li><strong>OpenCV DNN\uff08ResNet SSD\uff09<\/strong>\u3092\u4f7f\u3063\u305f\u9ad8\u7cbe\u5ea6\u306a\u691c\u51fa<\/li>\n  <li><strong>GPU\u9ad8\u901f\u5316\uff08CUDA\uff09<\/strong>\u306b\u3088\u308b\u51e6\u7406\u6642\u9593\u77ed\u7e2e<\/li>\n<\/ul>\n\n<p>\u3068\u3044\u30463\u3064\u306e\u89b3\u70b9\u3067\u3001Python\u306b\u3088\u308b\u5b9f\u88c5\u30b3\u30fc\u30c9\u3068\u3068\u3082\u306b\u8a73\u3057\u304f\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n<hr>\n\n<h2>1. MediaPipe\u3092\u7528\u3044\u305f\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u9854\u691c\u51fa\uff0b\u30e2\u30b6\u30a4\u30af\u51e6\u7406<\/h2>\n\n<p>MediaPipe\u306fGoogle\u304c\u63d0\u4f9b\u3059\u308b\u8efd\u91cf\u306a\u30de\u30eb\u30c1\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0AI\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u3059\u3002Python\u7528\u306b\u3082\u6700\u9069\u5316\u3055\u308c\u3066\u304a\u308a\u3001\u7c21\u5358\u306b\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u9854\u691c\u51fa\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n<h3>\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\uff08\u4e3b\u8981\u90e8\uff09<\/h3>\n\n<pre><code>import mediapipe as mp\nmp_fd = mp.solutions.face_detection\nface_detector = mp_fd.FaceDetection(model_selection=1, min_detection_confidence=0.6)\n\ndef detect_faces_mediapipe(frame):\n    h, w = frame.shape[:2]\n    rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)\n    results = face_detector.process(rgb)\n    faces = []\n    if results.detections:\n        for det in results.detections:\n            box = det.location_data.relative_bounding_box\n            x = int(box.xmin * w)\n            y = int(box.ymin * h)\n            bw = int(box.width * w)\n            bh = int(box.height * h)\n            faces.append((x, y, bw, bh))\n    return faces\n<\/code><\/pre>\n\n<h3>\u7279\u5fb4<\/h3>\n<ul>\n  <li>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u7c21\u5358\uff08<code>pip install mediapipe<\/code>\uff09<\/li>\n  <li>\u8efd\u91cf\u304b\u3064\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0<\/li>\n  <li>\u30de\u30b9\u30af\u9854\u3084\u6a2a\u9854\u3078\u306e\u5bfe\u5fdc\u306f\u3084\u3084\u5f31\u3081<\/li>\n<\/ul>\n\n<hr>\n\n<h2>2. OpenCV DNN\uff08ResNet SSD\uff09\u3092\u4f7f\u3063\u305f\u9ad8\u7cbe\u5ea6\u691c\u51fa<\/h2>\n\n<p>OpenCV\u306b\u306f <code>cv2.dnn<\/code> \u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u3042\u308a\u3001\u5b66\u7fd2\u6e08\u307f\u306e Caffe \u30e2\u30c7\u30eb\uff08ResNet SSD\uff09\u3092\u4f7f\u3063\u3066\u9854\u691c\u51fa\u304c\u53ef\u80fd\u3067\u3059\u3002\u3053\u3061\u3089\u306f\u7cbe\u5ea6\u304c\u9ad8\u304f\u3001\u5c0f\u3055\u306a\u9854\u3082\u62fe\u3044\u3084\u3059\u3044\u3067\u3059\u3002<\/p>\n\n<h3>\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\uff08\u30de\u30eb\u30c1\u30b9\u30b1\u30fc\u30eb\u5bfe\u5fdc\uff09<\/h3>\n\n<pre><code>net = cv2.dnn.readNetFromCaffe(\"deploy.prototxt\", \"res10_300x300_ssd_iter_140000.caffemodel\")\n# GPU\u5229\u7528\u8a2d\u5b9a\uff08\u5f8c\u8ff0\uff09\nnet.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)\nnet.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)\n\ndef detect_faces_dnn_multiscale(frame, conf_threshold=0.4, scale_factors=[1.0, 1.5]):\n    h0, w0 = frame.shape[:2]\n    faces = []\n    for scale in scale_factors:\n        resized = cv2.resize(frame, (0, 0), fx=scale, fy=scale)\n        blob = cv2.dnn.blobFromImage(resized, 1.0, (300, 300),\n                                     (104.0, 177.0, 123.0), swapRB=False, crop=False)\n        net.setInput(blob)\n        dets = net.forward()\n        for i in range(dets.shape[2]):\n            conf = dets[0, 0, i, 2]\n            if conf &lt; conf_threshold: continue\n            x1 = int(dets[0,0,i,3] * resized.shape[1] \/ scale)\n            y1 = int(dets[0,0,i,4] * resized.shape[0] \/ scale)\n            x2 = int(dets[0,0,i,5] * resized.shape[1] \/ scale)\n            y2 = int(dets[0,0,i,6] * resized.shape[0] \/ scale)\n            faces.append((x1, y1, x2 - x1, y2 - y1))\n    return faces\n<\/code><\/pre>\n\n<h3>\u7279\u5fb4<\/h3>\n<ul>\n  <li>\u30e2\u30c7\u30eb\u3092\u624b\u52d5\u3067\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\uff08<code>prototxt<\/code>\u3068<code>caffemodel<\/code>\uff09<\/li>\n  <li>\u5c0f\u3055\u3044\u9854\u3084\u659c\u3081\u9854\u306b\u5f37\u3044<\/li>\n  <li>MediaPipe\u3088\u308a\u3084\u3084\u91cd\u3081\uff08GPU\u304c\u3042\u308c\u3070\u5feb\u9069\uff09<\/li>\n<\/ul>\n\n<hr>\n\n<h2>3. GPU\u3092\u4f7f\u3063\u305f\u9ad8\u901f\u5316\uff08OpenCV DNN \u00d7 CUDA\uff09<\/h2>\n\n<p>OpenCV\u306fCUDA\u5bfe\u5fdc\u30d3\u30eb\u30c9\u3067\u3042\u308c\u3070\u3001<code>cv2.dnn<\/code> \u30e2\u30b8\u30e5\u30fc\u30eb\u3092GPU\u3067\u52d5\u304b\u3059\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n<h3>\u8a2d\u5b9a\u30b3\u30fc\u30c9<\/h3>\n\n<pre><code># GPU\u4f7f\u7528\u306e\u6307\u5b9a\uff08CUDA\u30d3\u30eb\u30c9\u304c\u5fc5\u8981\uff09\nnet.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)\nnet.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)\n<\/code><\/pre>\n\n<h3>\u52b9\u679c<\/h3>\n\n<ul>\n  <li>\u51e6\u7406\u901f\u5ea6\uff1aCPU\u306e\u6570\u500d\u4ee5\u4e0a\uff08\u7279\u306b\u9ad8\u89e3\u50cf\u5ea6\u6620\u50cf\u3067\u5dee\u304c\u5927\uff09<\/li>\n  <li>\u9854\u691c\u51fa\u3084\u30de\u30eb\u30c1\u30b9\u30b1\u30fc\u30eb\u51e6\u7406\u304c\u73fe\u5b9f\u7684\u306a\u901f\u5ea6\u306b<\/li>\n<\/ul>\n\n<h3>\u6ce8\u610f\u70b9<\/h3>\n\n<ul>\n  <li>OpenCV\u306f\u901a\u5e38\u306e<code>pip install opencv-python<\/code>\u3067\u306fCUDA\u672a\u5bfe\u5fdc<\/li>\n  <li><strong>CUDA\u5bfe\u5fdcOpenCV<\/strong>\u3092\u81ea\u529b\u30d3\u30eb\u30c9 or <code>.whl<\/code>\u5c0e\u5165\u304c\u5fc5\u8981<\/li>\n  <li>Windows\u3067\u306f <a href=\"https:\/\/github.com\/huihut\/OpenCV4.9.0-cuda\" target=\"_blank\">Huihut\u6c0f\u306e\u30d3\u30eb\u30c9<\/a> \u306a\u3069\u304c\u4f7f\u3048\u308b<\/li>\n<\/ul>\n\n<hr>\n\n<h2>4. \u51e6\u7406\u901f\u5ea6\u30fb\u7cbe\u5ea6\u306e\u6bd4\u8f03<\/h2>\n\n<table>\n  <thead>\n    <tr><th>\u9805\u76ee<\/th><th>MediaPipe<\/th><th>OpenCV DNN\uff08CPU\uff09<\/th><th>OpenCV DNN\uff08GPU\uff09<\/th><\/tr>\n  <\/thead>\n  <tbody>\n    <tr><td>\u901f\u5ea6<\/td><td>\u25ce\uff08\u9ad8\u901f\uff09<\/td><td>\u25b3\uff08\u3084\u3084\u9045\u3044\uff09<\/td><td>\u25ce\uff08\u9ad8\u901f\uff09<\/td><\/tr>\n    <tr><td>\u7cbe\u5ea6<\/td><td>\u25cb<\/td><td>\u25ce\uff08\u30de\u30b9\u30af\u30fb\u5c0f\u9854\u5bfe\u5fdc\uff09<\/td><td>\u25ce<\/td><\/tr>\n    <tr><td>\u5c0f\u3055\u3044\u9854<\/td><td>\u25b3<\/td><td>\u25cb\uff5e\u25ce\uff08\u30de\u30eb\u30c1\u30b9\u30b1\u30fc\u30eb\u3067\u5f37\u5316\uff09<\/td><td>\u25ce<\/td><\/tr>\n    <tr><td>\u5c0e\u5165\u96e3\u6613\u5ea6<\/td><td>\u25ce\uff08pip\u306e\u307f\uff09<\/td><td>\u25cb\uff08\u30e2\u30c7\u30ebDL\u5fc5\u8981\uff09<\/td><td>\u25b3\uff08CUDA\u30d3\u30eb\u30c9\u304c\u5fc5\u8981\uff09<\/td><\/tr>\n  <\/tbody>\n<\/table>\n\n<hr>\n\n<h2>5. \u307e\u3068\u3081<\/h2>\n\n<p>\u6620\u50cf\u306e\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc\u5bfe\u7b56\u3068\u3057\u3066\u306e\u9854\u30e2\u30b6\u30a4\u30af\u51e6\u7406\u306f\u3001\u30b7\u30fc\u30f3\u306b\u5fdc\u3058\u3066\u9069\u5207\u306a\u9854\u691c\u51fa\u5668\u306e\u9078\u629e\u304c\u91cd\u8981\u3067\u3059\uff1a<\/p>\n\n<ul>\n  <li>\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30fb\u8efd\u91cf\u306a\u51e6\u7406 \u2192 MediaPipe<\/li>\n  <li>\u5c0f\u9854\u3084\u9ad8\u7cbe\u5ea6\u304c\u5fc5\u8981 \u2192 OpenCV DNN\uff08\u30de\u30eb\u30c1\u30b9\u30b1\u30fc\u30eb\uff09<\/li>\n  <li>\u91cd\u3044\u51e6\u7406\u3092\u9ad8\u901f\u5316 \u2192 CUDA\u3067GPU\u63a8\u8ad6<\/li>\n<\/ul>\n\n<p>Python\uff0bOpenCV\uff0bMediaPipe\u306f\u3001\u3042\u3089\u3086\u308b\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u52d5\u4f5c\u3059\u308b\u5f37\u529b\u306a\u9078\u629e\u80a2\u3067\u3059\u3002\u76ee\u7684\u306b\u5fdc\u3058\u3066\u6700\u9069\u306a\u69cb\u6210\u3092\u9078\u3073\u3001\u5b89\u5fc3\u30fb\u5b89\u5168\u306a\u6620\u50cf\u51e6\u7406\u3092\u5b9f\u73fe\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>Python\u3067\u6620\u50cf\u304b\u3089\u9854\u3092\u691c\u51fa\u3057\u30e2\u30b6\u30a4\u30af\u51e6\u7406\uff1aMediaPipe\u7248\u3068DNN(CUDA)\u9ad8\u901f\u5316\u306e\u6bd4\u8f03 \u6620\u50cf\u30c7\u30fc\u30bf\u304b\u3089\u4eba\u7269\u306e\u9854\u3092\u691c\u51fa\u3057\u3066\u30e2\u30b6\u30a4\u30af\u3092\u304b\u3051\u308b\u6280\u8853\u306f\u3001\u76e3\u8996\u30fb\u696d\u52d9\u8a18\u9332\u30fb\u6559\u80b2\u73fe\u5834\u306a\u3069\u3067\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc\u4fdd\u8b77\u306e\u305f\u3081\u306b\u975e\u5e38\u306b\u91cd\u8981 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"saved_in_kubio":false,"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"sns_share_botton_hide":"","vkExUnit_sns_title":"","_vk_print_noindex":"","sitemap_hide":"","vkExUnit_EyeCatch_disable":"","_veu_custom_css":"","veu_display_promotion_alert":"common","vkexunit_cta_each_option":"","_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[6],"tags":[],"class_list":["post-1560","post","type-post","status-publish","format-standard","hentry","category-programing"],"aioseo_notices":[],"veu_head_title_object":{"title":"","add_site_title":""},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/posts\/1560","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1560"}],"version-history":[{"count":2,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/posts\/1560\/revisions"}],"predecessor-version":[{"id":1562,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=\/wp\/v2\/posts\/1560\/revisions\/1562"}],"wp:attachment":[{"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1560"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1560"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/beeknowledge.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1560"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}