<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ガジェット、AI、ラズパイなどのコンピュータに関わる記事です | TAKE 1bit</title>
	<atom:link href="https://take1bit.com/category/computer-ja/feed/" rel="self" type="application/rss+xml" />
	<link>https://take1bit.com</link>
	<description>DIYで日常をハックするブログ</description>
	<lastBuildDate>Sun, 21 Sep 2025 08:52:48 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://take1bit.com/wp-content/uploads/2024/01/cropped-1bit_out-1-32x32.png</url>
	<title>ガジェット、AI、ラズパイなどのコンピュータに関わる記事です | TAKE 1bit</title>
	<link>https://take1bit.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>リアルタイム動体検知で進化したYouTube野鳥配信システム 〜親鳥の訪問を定量化してヒナの成長を科学する〜</title>
		<link>https://take1bit.com/computer-ja/update_youtube_streamer_with_udp/</link>
		
		<dc:creator><![CDATA[管理者]]></dc:creator>
		<pubDate>Sun, 24 Aug 2025 04:31:49 +0000</pubDate>
				<category><![CDATA[AI・プログラミング]]></category>
		<category><![CDATA[トックリツバメ観察]]></category>
		<guid isPermaLink="false">https://take1bit.com/?p=2081</guid>

					<description><![CDATA[はじめに：なぜ親鳥の訪問回数を数えるのか？ 前回の記事では、ラズパイでYouTubeライブ配信システムを構築して安定した野鳥観察配信を実現しました。しかし、実際に配信を続けるうちに「もっと配信を盛り上げたい」「科学的なデ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">はじめに：なぜ親鳥の訪問回数を数えるのか？</h2>



<p>前回の記事では、ラズパイでYouTubeライブ配信システムを構築して安定した野鳥観察配信を実現しました。しかし、実際に配信を続けるうちに「もっと配信を盛り上げたい」「科学的なデータが欲しい」という2つの課題が浮上してきました。</p>



<p>前回記事です。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-take-1-bit wp-block-embed-take-1-bit"><div class="wp-block-embed__wrapper">
https://take1bit.com/computer-ja/youtube_live_tsubame/
</div></figure>



<p>こちらがYoutubeライブ配信をトピック映像として集めたものになります。</p>


<figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><a href="https://take1bit.com/computer-ja/update_youtube_streamer_with_udp/"><img decoding="async" src="//i.ytimg.com/vi/PLyEy1UU9PhSIiEXNPZq4JH8_I-fomQGxL/hqdefault.jpg" alt="YouTube Video"></a><br /><br /><figcaption></figcaption></figure>


<h3 class="wp-block-heading">課題1：固定テキストでは配信が単調</h3>



<p>YouTube Live配信では、時刻表示だけでは視聴者にとって変化に乏しく、長時間の観察配信が単調になりがちでした。リアルタイムで変化する情報を表示することで、視聴者の関心を維持したいと考えました。</p>



<h3 class="wp-block-heading">課題2：親鳥の訪問頻度とヒナの成長の関係を定量化したい</h3>



<p><strong>親鳥の訪問頻度は、ヒナの成長に直結する重要な指標</strong>です。健康なヒナほど頻繁な給餌が必要で、親鳥の訪問回数や滞在時間から、ヒナの状態や成長段階を推測できます。これまで感覚的な観察に頼っていた部分を、数値として可視化したかったのです。</p>



<h3 class="wp-block-heading">課題3：作業時の親鳥の警戒時間を把握したい</h3>



<p>野鳥観察では、<strong>ヒナが巣から落ちることがよくあります</strong>。その際、巣の周辺で作業すると親鳥が警戒し、しばらく巣に戻らなくなります。この警戒時間がどの程度続くかは重要な情報で、巣の放棄リスクを判断する基準になります。</p>



<p>直近の親鳥来訪時刻を常時表示することで、「作業後どのくらい経っているか」「まだ警戒している可能性があるか」を判断できるようになります。</p>



<h2 class="wp-block-heading">解決策：UDP連携による動体検知システム</h2>



<p>これらの課題を解決するため、<strong>配信プログラムと動体検知プログラムをUDP通信で連携</strong>させる仕組みを開発しました。</p>



<h3 class="wp-block-heading">システムの全体像</h3>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="913" height="701" src="https://take1bit.com/wp-content/uploads/2025/08/image-24.png" alt="" class="wp-image-2083" srcset="https://take1bit.com/wp-content/uploads/2025/08/image-24.png 913w, https://take1bit.com/wp-content/uploads/2025/08/image-24-300x230.png 300w, https://take1bit.com/wp-content/uploads/2025/08/image-24-768x590.png 768w" sizes="(max-width: 913px) 100vw, 913px" /></figure>



<h3 class="wp-block-heading">技術的なポイント</h3>



<p><strong>1. ラズパイ5でも軽量動作を実現</strong></p>



<p>ラズパイ5という限られたリソースで、YouTube配信と動体検知を同時実行するため、<strong>極限まで軽量化</strong>を追求しました：</p>



<ul class="wp-block-list">
<li><strong>処理FPS</strong>: 2fps（配信は30fps、検知は2fps）</li>



<li><strong>検知解像度</strong>: 720&#215;720（配信と同じ）</li>



<li><strong>ROI指定</strong>: 巣エリアのみに限定（590&#215;66ピクセル）</li>



<li><strong>シンプルアルゴリズム</strong>: フレーム差分＋連結成分解析</li>
</ul>



<p><strong>2. UDP通信による低遅延連携</strong></p>



<p>FFmpegの<code>tee</code>マルチプレクサを使用して、YouTube配信と並行してUDP出力を生成：</p>



<pre class="wp-block-code"><code>ffmpeg -i /dev/video0 \
  -f tee \
  "&#91;f=flv]rtmp://youtube.com/live2/STREAM_KEY|&#91;f=mpegts]udp://localhost:1234"
</code></pre>



<p><strong>3. リアルタイムテキスト更新</strong></p>



<p>5秒間隔でファイル変更を監視し、更新があればFFmpegを再起動して画面テキストを更新する仕組みを実装しました。</p>



<h2 class="wp-block-heading">動体検知アルゴリズムの詳細</h2>



<h3 class="wp-block-heading">実際の画像</h3>



<p>以下のような画像を参考にして、左側の</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img decoding="async" width="440" height="441" data-id="2087" src="https://take1bit.com/wp-content/uploads/2025/08/1.jpg" alt="" class="wp-image-2087" srcset="https://take1bit.com/wp-content/uploads/2025/08/1.jpg 440w, https://take1bit.com/wp-content/uploads/2025/08/1-300x300.jpg 300w, https://take1bit.com/wp-content/uploads/2025/08/1-150x150.jpg 150w" sizes="(max-width: 440px) 100vw, 440px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="437" height="439" data-id="2086" src="https://take1bit.com/wp-content/uploads/2025/08/2.jpg" alt="" class="wp-image-2086" srcset="https://take1bit.com/wp-content/uploads/2025/08/2.jpg 437w, https://take1bit.com/wp-content/uploads/2025/08/2-300x300.jpg 300w, https://take1bit.com/wp-content/uploads/2025/08/2-150x150.jpg 150w" sizes="(max-width: 437px) 100vw, 437px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="437" height="434" data-id="2085" src="https://take1bit.com/wp-content/uploads/2025/08/3.jpg" alt="" class="wp-image-2085" srcset="https://take1bit.com/wp-content/uploads/2025/08/3.jpg 437w, https://take1bit.com/wp-content/uploads/2025/08/3-300x298.jpg 300w, https://take1bit.com/wp-content/uploads/2025/08/3-150x150.jpg 150w" sizes="(max-width: 437px) 100vw, 437px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="432" height="434" data-id="2084" src="https://take1bit.com/wp-content/uploads/2025/08/4.jpg" alt="" class="wp-image-2084" srcset="https://take1bit.com/wp-content/uploads/2025/08/4.jpg 432w, https://take1bit.com/wp-content/uploads/2025/08/4-300x300.jpg 300w, https://take1bit.com/wp-content/uploads/2025/08/4-150x150.jpg 150w" sizes="(max-width: 432px) 100vw, 432px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="430" height="437" data-id="2088" src="https://take1bit.com/wp-content/uploads/2025/08/6.jpg" alt="" class="wp-image-2088" srcset="https://take1bit.com/wp-content/uploads/2025/08/6.jpg 430w, https://take1bit.com/wp-content/uploads/2025/08/6-295x300.jpg 295w" sizes="(max-width: 430px) 100vw, 430px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="427" height="436" data-id="2089" src="https://take1bit.com/wp-content/uploads/2025/08/7.jpg" alt="" class="wp-image-2089" srcset="https://take1bit.com/wp-content/uploads/2025/08/7.jpg 427w, https://take1bit.com/wp-content/uploads/2025/08/7-294x300.jpg 294w" sizes="(max-width: 427px) 100vw, 427px" /></figure>
</figure>



<p>これらの画像から以下の左下の部分はヒナは干渉せず、親鳥が来た時だけ画像が変わる部分なので、そこのエリアだけの動体検知を別プログラムで並走させます。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="385" height="373" src="https://take1bit.com/wp-content/uploads/2025/08/image-26.png" alt="" class="wp-image-2091" srcset="https://take1bit.com/wp-content/uploads/2025/08/image-26.png 385w, https://take1bit.com/wp-content/uploads/2025/08/image-26-300x291.png 300w" sizes="(max-width: 385px) 100vw, 385px" /></figure>



<h3 class="wp-block-heading">スコアリングシステム</h3>



<p>親鳥の訪問判定には、複数の要素を組み合わせたスコアリングシステムを採用：</p>



<pre class="wp-block-code"><code>parent_score = 0

# 1. 動き検出（前フレームとの差分）
if recent_motion &gt; 0.05:     # 5%の変化で +1点
    parent_score += 1

# 2. 面積変化（物体サイズ）  
if recent_area &gt; 0.08:       # 8%の変化で +2点
    parent_score += 2

# 3. 明度変化（影の検出）
if recent_darkness &gt; 0.3:    # 30%が暗くなると +2点
    parent_score += 2

# 4. 大きな物体検出
if large_objects &gt; 0:        # 大きな物体で +2点
    parent_score += 2

# 合計4点以上で「訪問」と判定
if parent_score &gt;= 4:
    visit_detected = True
</code></pre>



<h3 class="wp-block-heading">パフォーマンス最適化</h3>



<p><strong>ROI（関心領域）の限定</strong></p>



<p>巣のエリアのみに処理を限定することで、計算量を大幅削減：</p>



<pre class="wp-block-code"><code># 巣エリアのみを切り出し（座標は実測値）
nest_roi = (26, 618, 590, 66)  # x, y, width, height
roi = frame&#91;y:y+h, x:x+w]
</code></pre>



<p><strong>履歴ベースの判定</strong></p>



<p>過去5フレームの移動平均を使用して、ノイズに強い検知を実現：</p>



<pre class="wp-block-code"><code>self.motion_history = deque(maxlen=5)
recent_motion = np.mean(list(self.motion_history))
</code></pre>



<h2 class="wp-block-heading">実装結果と配信画面</h2>



<h3 class="wp-block-heading">表示される情報</h3>



<p>配信画面には4つの情報が表示されます：</p>



<pre class="wp-block-code"><code>┌─────────────────────────────────┐
│ 2024-08-24 14:30:15           │ ← 現在時刻（自動）
│ ２回目の産卵! 8月22日巣立ち予定  │ ← topic.txt
│ 訪問回数: 12回 滞在: 8.3秒     │ ← visit_info.txt（自動更新）
│ Youtube登録お願いします         │ ← stream.txt
└─────────────────────────────────┘
</code></pre>



<p><strong>各ファイルの役割</strong></p>



<ul class="wp-block-list">
<li><strong>topic.txt</strong>: 現在の状況・トピック（例：「産卵中」「抱卵期間」「巣立ち間近」）</li>



<li><strong>visit_info.txt</strong>: 動体検知結果（JSON形式、自動生成）</li>



<li><strong>stream.txt</strong>: 視聴者向けメッセージ（例：「チャンネル登録お願いします」）</li>
</ul>



<h3 class="wp-block-heading">実際のデータ例</h3>



<p>実際の観察で得られた訪問データ（JSON形式）：</p>



<pre class="wp-block-code"><code>{
  "count": 47,
  "last_duration": 15.2,
  "last_visit_time": "14時25分", 
  "total_duration": 245.8,
  "visits": &#91;
    {
      "time": "2024-08-24T14:25:33",
      "duration": 15.2,
      "count": 47
    }
  ]
}
</code></pre>



<p>このデータから以下の分析が可能になりました：</p>



<ul class="wp-block-list">
<li><strong>1日の訪問回数</strong>: 平均45-60回</li>



<li><strong>平均滞在時間</strong>: 給餌時3-8秒、掃除時10-20秒</li>



<li><strong>訪問パターン</strong>: 早朝と夕方にピークあり</li>



<li><strong>警戒時間</strong>: 人的作業後、平均2-3時間は訪問頻度低下</li>
</ul>



<h2 class="wp-block-heading">技術仕様とパフォーマンス</h2>



<h3 class="wp-block-heading">システム性能</h3>



<p><strong>ハードウェア</strong>: Raspberry Pi 5 (8GB) <strong>配信設定</strong>: 1280&#215;720 → 720&#215;720、30fps、1200kbps <strong>動体検知</strong>: 720&#215;720、2fps処理 <strong>CPU使用率</strong>: 平均60-70%（配信＋検知同時実行） <strong>メモリ使用量</strong>: 約1.2GB</p>



<h3 class="wp-block-heading">安定性の向上</h3>



<p><strong>自動再接続機能</strong></p>



<ul class="wp-block-list">
<li>8時間ごとの定期再接続</li>



<li>切断時の自動復旧（最大5回試行）</li>



<li>テキスト更新時の自動反映</li>
</ul>



<p><strong>エラーハンドリング</strong></p>



<ul class="wp-block-list">
<li>UDP接続エラー時のフォールバック</li>



<li>FFmpeg異常終了時の自動復旧</li>



<li>ファイル読み書きエラーの処理</li>
</ul>



<h2 class="wp-block-heading">野鳥観察への応用と発見</h2>



<h3 class="wp-block-heading">科学的観察の向上</h3>



<p>定量的データにより、これまで気付かなかった行動パターンが明らかに：</p>



<p><strong>1. 給餌頻度の変化</strong></p>



<ul class="wp-block-list">
<li>孵化直後: 30分間隔</li>



<li>成長期: 15分間隔</li>



<li>巣立ち前: 45分間隔</li>
</ul>



<p><strong>2. 滞在時間の意味</strong></p>



<ul class="wp-block-list">
<li>3秒以下: 餌の受け渡しのみ</li>



<li>5-10秒: 餌やり＋様子確認</li>



<li>15秒以上: 巣の掃除・整備</li>
</ul>



<p><strong>3. 人間活動の影響</strong></p>



<ul class="wp-block-list">
<li>ベランダ作業後: 2-4時間警戒</li>



<li>洗濯物干し: 30分-1時間警戒</li>



<li>騒音: 一時的（10-30分）</li>
</ul>



<h3 class="wp-block-heading">配信の盛り上がり</h3>



<p>リアルタイム統計表示により視聴者の関心が大幅向上：</p>



<ul class="wp-block-list">
<li><strong>滞在時間増加</strong>: 平均観視聴時間が約2倍に</li>



<li><strong>コメント活性化</strong>: 「今の訪問は何秒だった？」等のやり取り増加</li>



<li><strong>科学的関心</strong>: 「親鳥の頑張りが数値で分かる」という評価</li>
</ul>



<h2 class="wp-block-heading">まとめ：低コストで実現する科学的野鳥観察</h2>



<p>今回のシステムにより、<strong>総額2万円程度の機材</strong>で以下を実現できました：</p>



<h3 class="wp-block-heading">技術的成果</h3>



<ul class="wp-block-list">
<li>ラズパイ5での配信＋動体検知同時実行</li>



<li>リアルタイムデータ更新機能</li>



<li>24時間安定動作</li>
</ul>



<h3 class="wp-block-heading">観察的成果</h3>



<ul class="wp-block-list">
<li>定量的な行動分析</li>



<li>人間活動影響の可視化</li>



<li>配信品質の向上</li>
</ul>



<h3 class="wp-block-heading">今後の展開</h3>



<p>このシステムは他の野鳥観察や定点観測にも応用可能です。ROI座標や検知パラメータを調整することで、様々な観察対象に対応できます。</p>



<p><strong>パラメータ調整例</strong>：</p>



<ul class="wp-block-list">
<li>大型鳥: <code>score_threshold=5</code>、<code>min_visit_interval=5</code></li>



<li>小型鳥: <code>score_threshold=3</code>、面積閾値を小さく</li>



<li>夜行性: 明度検出の重み付け変更</li>
</ul>



<p>野鳥観察の楽しみ方が「感覚的観察」から「科学的分析」へと進化し、新しい発見や気づきを得られるシステムとなりました。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">技術詳細・ソースコード</h2>



<p>今回開発したプログラムはgithubで公開しています：</p>



<p><a rel="noopener" target="_blank" href="https://github.com/hiirofish/bird-watching-youtube-streamer">https://github.com/hiirofish/bird-watching-youtube-streamer<span class="fa fa-external-link external-icon anchor-icon"></span></a></p>



<p>設定方法や詳細な使い方も記載していますので、同様のシステムを構築したい方はぜひ参考にしてください！</p>



<h2 class="wp-block-heading">まとめ：シンプルな仕組みで大きな効果を実現</h2>



<h3 class="wp-block-heading">ライブ感の向上と視聴体験の改善</h3>



<p>このシステム導入により、<strong>配信のライブ感が大幅に向上</strong>しました。固定テキストだけの配信から、リアルタイムで変化する統計情報が表示されることで、視聴者は「今まさに何が起きているか」を数値で把握できるようになりました。</p>



<p>特に<strong>10時間を超える長時間配信において、その効果は絶大</strong>でした。YouTubeでは長時間配信のプレビューが適切に表示されず、シークバーでの時間移動も大雑把になってしまいます。そんな中、「直近の親鳥訪問時刻」の表示は非常に実用的で、視聴者が「親鳥がいつ来たか」を瞬時に判断できる貴重な情報源となりました。</p>



<h3 class="wp-block-heading">軽量で実用的な動体検知アプローチ</h3>



<p>今回採用した**「特定領域のみを親鳥のみが通る」という前提に基づく簡易検知方式**は、想像以上に効果的でした。ROI指定により計算量を大幅削減し、ラズパイでの負荷はほぼゼロ。誤検知は存在しますが、参考情報としては十分な精度を確保できました。</p>



<h3 class="wp-block-heading">今後の展望とおわりに</h3>



<p>時間と予算があれば、機械学習による鳥種識別や行動パターン分析など、より高度なシステムへの発展も可能でしょう。しかし現在のシンプルなシステムでも、<strong>低コスト・軽量・実用的</strong>というキーワードで野鳥観察配信の新しい可能性を切り開けたと考えています。</p>



<p>同じように野鳥観察や定点観測を楽しまれている方々に、このシステムが新しいインスピレーションを与えられれば幸いです。技術的な質問や改良アイデアがございましたら、ぜひGitHubやコメント欄でお聞かせください！</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>YouTube Liveコメント監視システム｜鳥の定点観測で緊急通報を実現</title>
		<link>https://take1bit.com/computer-ja/youtube-live-notify/</link>
		
		<dc:creator><![CDATA[管理者]]></dc:creator>
		<pubDate>Sun, 24 Aug 2025 02:40:51 +0000</pubDate>
				<category><![CDATA[AI・プログラミング]]></category>
		<category><![CDATA[トックリツバメ観察]]></category>
		<guid isPermaLink="false">https://take1bit.com/?p=2074</guid>

					<description><![CDATA[背景 ひょんなことから始めた鳥観測システム1期目では1羽は生まれてすぐに死亡したのですが、それ以降は落下することもなく無事巣立ちました。しかし、まさかの2期目が始まり、4羽いたのですが、結構な割合で落下するようになりまし [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">背景</h2>



<p>ひょんなことから始めた鳥観測システム1期目では1羽は生まれてすぐに死亡したのですが、それ以降は落下することもなく無事巣立ちました。しかし、まさかの2期目が始まり、4羽いたのですが、結構な割合で落下するようになりました。</p>



<p>早期救出が生存を分けると思うのですが、普段はリモートワークで普通に仕事しているので、仕事が終わって、子供が寝静まってから15時間分の動画をチェックして初めて気づくという形でした。</p>



<p>幸い、ヒナの落下が始まる頃には2期目はライブ配信を見守ってくれる方々が教えてくれるようになりました。教えてくれるのですが、YouTubeをちょこちょこ見るわけにもいかず、LINE通知ができれば少しでも早い救出ができると思ったので、<strong>YouTube Liveのコメントで特定キーワードが検出されたらLINEに通報する仕組み</strong>を作成したので、紹介します。</p>



<p>こちらがyoutubeライブ動画の一部をまとめたものです。</p>




<a href="https://take1bit.com/computer-ja/youtube-live-notify/"><img decoding="async" src="//i.ytimg.com/vi/SWzoxVkeaCk/hqdefault.jpg" alt="YouTube Video"></a><br /><br />




<h2 class="wp-block-heading">システム概要</h2>



<h3 class="wp-block-heading">主な機能</h3>



<ul class="wp-block-list">
<li>YouTube Liveのコメント欄をリアルタイム監視</li>



<li>指定キーワード（「hina」「緊急」など）を自動検知</li>



<li>検知時に即座にLINE通知を送信</li>



<li>APIクォータ節約機能で無料枠内で安全運用</li>
</ul>



<h3 class="wp-block-heading">効率的なAPI使用設計</h3>



<ul class="wp-block-list">
<li>配信中：2分間隔でチェック</li>



<li>配信待機中：10分間隔でチェック</li>



<li>配信時間外：1時間間隔で自動調整</li>



<li>YouTube Data APIの無料枠（10,000クォータ/日）内で動作</li>
</ul>



<h3 class="wp-block-heading">動作環境</h3>



<ul class="wp-block-list">
<li><strong>ハードウェア</strong>: Raspberry Pi（ラズパイ）</li>



<li><strong>Python</strong>: 3.7以上</li>



<li><strong>OS</strong>: Raspberry Pi OS</li>
</ul>



<h2 class="wp-block-heading">目次</h2>



<ol class="wp-block-list">
<li><a href="#%E6%BA%96%E5%82%99">準備</a></li>



<li><a href="#youtube-api%E8%AA%8D%E8%A8%BC%E8%A8%AD%E5%AE%9A">YouTube API認証設定</a>
<ul class="wp-block-list">
<li><a href="#google-cloud-console%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E4%BD%9C%E6%88%90">Google Cloud Consoleでプロジェクト作成</a></li>



<li><a href="#clientjson%E3%81%AE%E8%A8%AD%E7%BD%AE">client.jsonの設置</a></li>
</ul>
</li>



<li><a href="#line-bot%E8%A8%AD%E5%AE%9A">LINE Bot設定</a>
<ul class="wp-block-list">
<li><a href="#line-developers-console%E3%81%A7bot%E4%BD%9C%E6%88%90">LINE Developers ConsoleでBot作成</a></li>



<li><a href="#line%E8%AA%8D%E8%A8%BC%E6%83%85%E5%A0%B1%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E4%BD%9C%E6%88%90">LINE認証情報ファイル作成</a></li>



<li><a href="#%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BCid%E3%81%AE%E5%8F%96%E5%BE%97%E6%96%B9%E6%B3%95">ユーザーIDの取得方法</a></li>
</ul>
</li>



<li><a href="#%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89">ソースコード</a></li>



<li><a href="#%E5%AE%9F%E8%A1%8C">実行</a></li>



<li><a href="#%E5%AE%9F%E9%9A%9B%E3%81%AE%E4%BD%BF%E7%94%A8%E4%BE%8B">実際の使用例</a></li>



<li><a href="#%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85">セキュリティ注意事項</a></li>



<li><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></li>
</ol>



<h2 class="wp-block-heading">準備</h2>



<p>Google APIを使うのと、LINE Message APIの二つの設定が必要なので事前に設定する情報が多いです。以下簡単に説明します。</p>



<h2 class="wp-block-heading">YouTube API認証設定</h2>



<p>こちらの記事にYouTube Data API v3の使い方を書いてあるので参照ください。</p>



<p><strong>参考記事</strong>: <a href="https://take1bit.com/computer-ja/youtube_data_api_llm/">YouTube動画200本をAPI自動化でHP掲載</a></p>



<h3 class="wp-block-heading">Google Cloud Consoleでプロジェクト作成</h3>



<ol class="wp-block-list">
<li><a rel="noopener" target="_blank" href="https://console.cloud.google.com/">Google Cloud Console<span class="fa fa-external-link external-icon anchor-icon"></span></a> にアクセス</li>



<li>新しいプロジェクトを作成またはプロジェクトを選択</li>



<li>YouTube Data API v3を有効化</li>



<li>認証情報を作成（OAuth 2.0 クライアントID）</li>



<li>アプリケーションタイプで「デスクトップアプリケーション」を選択</li>



<li><code>client.json</code>ファイルをダウンロード</li>
</ol>



<h3 class="wp-block-heading">client.jsonの設置</h3>



<pre class="wp-block-code"><code><em># ダウンロードしたファイルをプロジェクトルートに配置</em>
cp ~/Downloads/client_secret_xxxxx.json ./client.json</code></pre>



<h2 class="wp-block-heading">LINE Bot設定</h2>



<p>LINEのBot設定については、基本的な流れは以下のような記事を参考にしてください：</p>



<p><strong>参考記事</strong>: <a href="https://take1bit.com/computer-ja/paypay_line_notify/">PayPay決済通知をLINEで受け取る方法｜Google Apps Script活用ガイド</a> ※LINEボット設定部分を参照</p>



<h3 class="wp-block-heading">LINE Developers ConsoleでBot作成</h3>



<ol class="wp-block-list">
<li><a rel="noopener" target="_blank" href="https://developers.line.biz/">LINE Developers Console<span class="fa fa-external-link external-icon anchor-icon"></span></a> にアクセス</li>



<li>プロバイダーを作成（未作成の場合）</li>



<li>Messaging APIチャネルを作成</li>



<li>チャネルアクセストークン（長期）を発行</li>



<li>Webhook設定を無効化（使用しないため）</li>
</ol>



<h3 class="wp-block-heading">LINE認証情報ファイル作成</h3>



<p>bash</p>



<pre class="wp-block-code"><code><em># アクセストークンファイル作成</em>
echo "YOUR_CHANNEL_ACCESS_TOKEN" &gt; access_token.txt

<em># 通知先ユーザーIDファイル作成</em>
echo "YOUR_USER_ID" &gt; user_id.txt</code></pre>



<h4 class="wp-block-heading">ユーザーIDの取得方法</h4>



<ol class="wp-block-list">
<li>LINE Botと友達になる</li>



<li>任意のメッセージを送信</li>



<li><a rel="noopener" target="_blank" href="https://developers.line.biz/console/">LINE Bot Designer<span class="fa fa-external-link external-icon anchor-icon"></span></a> の Messaging API設定でWebhookを一時的に有効化</li>



<li>Webhook URLで受信したイベントからユーザーIDを確認</li>
</ol>



<h2 class="wp-block-heading">ソースコード</h2>



<p>こちらにソースコードを公開しております。</p>



<p><strong>GitHub</strong>: <a rel="noopener" target="_blank" href="https://github.com/hiirofish/comment-line-bot-youtube">hiirofish/comment-line-bot-youtube<span class="fa fa-external-link external-icon anchor-icon"></span></a></p>



<h3 class="wp-block-heading">設定ファイルの準備</h3>



<p>プロジェクトをクローン後、以下のファイルを作成してください：</p>



<pre class="wp-block-code"><code><em># リポジトリクローン</em>
git clone https://github.com/hiirofish/comment-line-bot-youtube.git
cd comment-line-bot-youtube

<em># チャンネルIDファイル作成</em>
echo "UCxxxxxxxxxxxxxxxxx" &gt; channel_id.txt

<em># 必要パッケージインストール</em>
pip install -r requirements.txt</code></pre>



<h2 class="wp-block-heading">実行</h2>



<h3 class="wp-block-heading">1. ライブ配信を開始</h3>



<p>まず、YouTubeでライブ配信を実施します。</p>



<h3 class="wp-block-heading">2. プログラム実行</h3>



<pre class="wp-block-code"><code>python monitor_for_youtubelive.py</code></pre>



<p><strong>初回実行時のみ</strong>、ターミナルにGoogleの認証URLが表示されます：</p>



<pre class="wp-block-code"><code>Please visit this URL to authorize this application: https://accounts.google.com/oauth/authorize?...</code></pre>



<p>ブラウザでURLを開いて認証すると、<code>token.pickle</code>ファイルが生成され、2回目以降は自動で認証されます。</p>



<h3 class="wp-block-heading">3. 自動動作開始</h3>



<p>プログラムが以下のように動作します：</p>



<ol class="wp-block-list">
<li><code>channel_id.txt</code>から自動でライブ配信を検索</li>



<li>配信中のコメントを取得</li>



<li>定期的に監視し、キーワードが発見されればLINEに通知</li>
</ol>



<h2 class="wp-block-heading">実際の使用例</h2>



<h3 class="wp-block-heading">起動時のログ例（実際の動作ログから一部マスク）</h3>



<pre class="wp-block-code"><code>pi@raspberrypi:~/comment-line-bot-youtube $ python monitor_for_youtubelive.py 
2025-08-24 11:28:41,596 - INFO - ==================================================
2025-08-24 11:28:41,596 - INFO - YouTube Live Comment Monitor 起動（クォータ節約版）
2025-08-24 11:28:41,596 - INFO - ==================================================
2025-08-24 11:28:41,596 - INFO - チャンネルID読み込み完了: UCxxxxxxxxxxxxxxxxx
2025-08-24 11:28:41,597 - INFO - 監視チャンネル: UCxxxxxxxxxxxxxxxxx
2025-08-24 11:28:41,597 - INFO - 監視キーワード: 'hina' (緊急), 'test' (テスト)
2025-08-24 11:28:41,597 - INFO - 配信時間: 5:00-19:00
2025-08-24 11:28:41,597 - INFO - チェック間隔: 配信中120秒, 待機中600秒
2025-08-24 11:28:41,597 - INFO - ==================================================
2025-08-24 11:28:41,597 - INFO - LINE認証情報を読み込みました
2025-08-24 11:28:42,070 - INFO - YouTube API認証完了
2025-08-24 11:28:42,246 - INFO - ✅ LINE通知送信成功: test
2025-08-24 11:28:42,622 - INFO - 📺 ライブ配信発見: 野鳥の巣のライブ配信
2025-08-24 11:28:42,702 - INFO - ✅ 配信監視を開始しました
2025-08-24 11:28:42,907 - INFO - ✅ LINE通知送信成功: test</code></pre>



<h3 class="wp-block-heading">キーワード検知時のログ例</h3>



<pre class="wp-block-code"><code>2025-08-24 14:53:57 - WARNING - ⚠️ キーワード検知 &#91;emergency]: 視聴者A - hina いないかなぁ
2025-08-24 14:53:58 - INFO - ✅ LINE通知送信成功: emergency</code></pre>



<h3 class="wp-block-heading">実際のLINE通知例</h3>



<p><strong>システム起動通知:</strong></p>



<pre class="wp-block-code"><code>🔍 【テスト】動作確認

投稿者: システム
コメント: 監視システムが起動しました（省エネモード）
時刻: 09:11:25

本日のAPI使用: 3回</code></pre>



<p><strong>緊急通知例:</strong></p>



<pre class="wp-block-code"><code>🚨🚨🚨 【緊急】キーワード検知

投稿者: ○○ちゃん
コメント: hina いないかなぁ
時刻: 14:53:57

本日のAPI使用: 218回</code></pre>



<pre class="wp-block-code"><code>🚨🚨🚨 【緊急】キーワード検知

投稿者: ××ロー
コメント: 14:47ちゅーたジャイアンに押された😭hina
時刻: 14:57:58

本日のAPI使用: 220回</code></pre>



<h3 class="wp-block-heading">APIクォータ管理</h3>



<ul class="wp-block-list">
<li><strong>1日の推定使用量</strong>: 約200-300クォータ（8時間配信の場合）</li>



<li><strong>無料枠内での安全運用</strong>: YouTube Data APIの10,000クォータ/日以内</li>



<li><strong>クォータ超過時</strong>: 翌日17時まで自動待機</li>
</ul>



<h3 class="wp-block-heading">自動運転機能</h3>



<ul class="wp-block-list">
<li>配信開始/終了の自動検知</li>



<li>エラー時の自動復旧</li>



<li>重複通知の防止</li>



<li>詳細なログ出力</li>
</ul>



<h2 class="wp-block-heading">セキュリティ注意事項</h2>



<h3 class="wp-block-heading">認証ファイルの適切な管理</h3>



<p>以下のファイルには重要な認証情報が含まれているため、適切に管理してください：</p>



<p><strong>秘匿すべきファイル:</strong></p>



<ul class="wp-block-list">
<li><code>client.json</code> &#8211; YouTube API OAuth認証情報</li>



<li><code>token.pickle</code> &#8211; YouTubeアクセストークンキャッシュ</li>



<li><code>access_token.txt</code> &#8211; LINEボットアクセストークン</li>



<li><code>user_id.txt</code> &#8211; LINE通知先ユーザーID</li>



<li><code>channel_id.txt</code> &#8211; 監視対象チャンネルID</li>
</ul>



<h3 class="wp-block-heading">セキュリティ対策</h3>



<ol class="wp-block-list">
<li><strong>ファイル権限設定</strong></li>
</ol>



<pre class="wp-block-code"><code><em># 認証ファイルの権限を制限</em>
chmod 600 client.json token.pickle access_token.txt user_id.txt</code></pre>



<ol start="2" class="wp-block-list">
<li><strong>Git管理からの除外</strong> <code>.gitignore</code>ファイルで以下を除外設定：</li>
</ol>



<pre class="wp-block-code"><code>client.json
token.pickle
access_token.txt
user_id.txt
channel_id.txt</code></pre>



<ol start="3" class="wp-block-list">
<li><strong>定期的なトークン更新</strong></li>
</ol>



<ul class="wp-block-list">
<li>LINEアクセストークンは定期的に再発行を推奨</li>



<li>YouTube APIトークンは自動更新されますが、問題発生時は<code>token.pickle</code>を削除して再認証</li>
</ul>



<ol start="4" class="wp-block-list">
<li><strong>ネットワークセキュリティ</strong></li>
</ol>



<ul class="wp-block-list">
<li>ラズパイのSSH設定を適切に行う</li>



<li>ファイアウォール設定でポート制限</li>



<li>定期的なシステム更新</li>



<li></li>
</ul>



<h2 class="wp-block-heading">救出成功例</h2>



<p>実際にこのシステムを使って、視聴者からの通報により迅速にヒナの救出に成功した事例があります。従来なら仕事終わりに録画をチェックして発見する（数時間後）ところを、リアルタイム通知により数分以内に対応できるようになりました。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="414" height="742" src="https://take1bit.com/wp-content/uploads/2025/08/image-23.png" alt="" class="wp-image-2079" srcset="https://take1bit.com/wp-content/uploads/2025/08/image-23.png 414w, https://take1bit.com/wp-content/uploads/2025/08/image-23-167x300.png 167w" sizes="(max-width: 414px) 100vw, 414px" /></figure>



<h2 class="wp-block-heading">まとめ</h2>



<p>設定がやや複雑だったりしますが、定点観測などの緊急通報システムとしては実用的だと思いました。今回はコメントからLINE通知でしたが、コメントから動画演出を加えるようなシステムも作れれば面白そうですね。</p>



<p>ラズパイでの24時間稼働も問題なく、APIクォータも無料枠内で十分運用できています。時間があれば、コメントトリガーでの自動録画機能なども試してみたいと思います。</p>



<p>野鳥観察や定点観測で同様の課題を抱えている方の参考になれば幸いです。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>写真動画自動整理ツール｜撮影時刻でリネーム</title>
		<link>https://take1bit.com/computer-ja/auto_timestamp_rename/</link>
		
		<dc:creator><![CDATA[管理者]]></dc:creator>
		<pubDate>Mon, 11 Aug 2025 11:10:28 +0000</pubDate>
				<category><![CDATA[AI・プログラミング]]></category>
		<guid isPermaLink="false">https://take1bit.com/?p=2069</guid>

					<description><![CDATA[Google Drive共有で困ったことはありませんか？ 家族旅行や結婚式、イベントなどで複数の人がiPhone、Android、一眼レフカメラなどで撮影した写真や動画。Google Driveで共有してもらったファイル [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Google Drive共有で困ったことはありませんか？</h2>



<p>家族旅行や結婚式、イベントなどで複数の人がiPhone、Android、一眼レフカメラなどで撮影した写真や動画。Google Driveで共有してもらったファイルをダウンロードすると、撮影順ではなくファイル名順やダウンロード順に並んでしまい、時系列で整理するのがとても大変です。</p>



<p>例えば、windowsのエクスプローラだと、撮影日時、メディアの作成日時、なにも記載がないなどに分かれてしまいます。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="893" height="459" src="https://take1bit.com/wp-content/uploads/2025/08/image-20.png" alt="" class="wp-image-2070" srcset="https://take1bit.com/wp-content/uploads/2025/08/image-20.png 893w, https://take1bit.com/wp-content/uploads/2025/08/image-20-300x154.png 300w, https://take1bit.com/wp-content/uploads/2025/08/image-20-768x395.png 768w" sizes="(max-width: 893px) 100vw, 893px" /></figure>



<p><strong>従来の手作業での整理</strong></p>



<ol class="wp-block-list">
<li>ファイル名でデバイスを特定</li>



<li>デバイスごとにフォルダ分け</li>



<li>手動でファイル名に撮影時刻を追加</li>



<li>やっと時系列で並び替え可能</li>
</ol>



<p>この面倒な作業を自動化するツールを作成しました。</p>



<h2 class="wp-block-heading">ツールの特徴</h2>



<h3 class="wp-block-heading">撮影時刻を正確に判定</h3>



<p>写真や動画ファイルには撮影時刻の情報が記録されていますが、デバイスやファイル形式によって情報の場所が異なります。このツールは各デバイスの特徴を理解して、最も信頼できる撮影時刻を自動判定します。</p>



<p><strong>対応デバイス</strong></p>



<ul class="wp-block-list">
<li><strong>iPhone</strong>: 静止画（JPEG/HEIC）、動画（MOV/MP4）の撮影時刻を高精度で取得</li>



<li><strong>Android（Pixel等）</strong>: ファイル名に詳細な日時が含まれるため安心</li>



<li><strong>一眼レフカメラ</strong>: RAWファイルやJPEGのEXIFデータから正確な撮影時刻を取得</li>



<li><strong>その他</strong>: アクションカメラや古いデジカメにも可能な限り対応</li>
</ul>



<h3 class="wp-block-heading">3段階の信頼度判定</h3>



<ul class="wp-block-list">
<li><strong>✅ 信頼できる</strong>: カメラが記録した正確な撮影時刻</li>



<li><strong>⚠️ 推定</strong>: ファイル名から日付パターンを推定（要確認）</li>



<li><strong>❌ 危険</strong>: ファイルシステムの日時のみ（信頼できない）</li>
</ul>



<h3 class="wp-block-heading">編集済みファイルにも対応</h3>



<p>SNS投稿や写真編集で撮影時刻が消えてしまったファイルでも、ファイル名に日付パターンが残っていれば推定できます。</p>



<p>例：<code>PXL_20240430_101021354.TS_exported_7456.jpg</code> → 2024年4月30日 10時10分21秒と推定</p>



<h2 class="wp-block-heading">実際の使用方法</h2>



<h3 class="wp-block-heading">事前準備</h3>



<p>bash</p>



<pre class="wp-block-code"><code><em># Ubuntu/Debian</em>
sudo apt-get install exiftool

<em># macOS  </em>
brew install exiftool</code></pre>



<h3 class="wp-block-heading">手順1：ファイルをまとめてスキャン</h3>



<p>すべての写真・動画を一つのフォルダに入れて、まずスキャンを実行します。</p>



<p>bash</p>



<pre class="wp-block-code"><code>python rename_video.py scan photo</code></pre>



<p><strong>実行結果例</strong></p>



<pre class="wp-block-code"><code>対象ディレクトリ: photo
検出されたファイル数: 1064
結果をCSVに保存しました: media_analysis_20250811_190230.csv
============================================================
処理結果サマリー
============================================================
処理ファイル数: 1064
信頼できる日付: 1057
推定による日付: 6
信頼できない日付: 1
日付情報なし: 0
警告が必要なファイル: 68</code></pre>



<h3 class="wp-block-heading">手順2：問題ファイルの確認</h3>



<p>信頼できないファイルが自動で表示されます。</p>



<p>ちなみに△と表示されたものをrenameで実行すると、推定日付の日付に変換されます。<br>Xと記載のあるものは、unkownを先頭につけてリネームします。</p>



<pre class="wp-block-code"><code>⚠ 要注意ファイル (7件):
------------------------------------------------------------
⚠ PXL_20240430_101021354.TS.mp4
   日付: 2024-04-30 10:10:21 (ソース: filename_pattern)
   警告: 撮影日時を推定しました

❌ exported_B84E1DBD-44D7-445C-9EA4-F65DC2CEEC97.JPG
   日付: 2025-08-10 19:27:37 (ソース: FileModifyDate)
   警告: ⚠ 危険: 信頼できないファイル日付を使用</code></pre>



<h3 class="wp-block-heading">手順3：CSVファイルで最終確認</h3>



<p>生成された <code>media_analysis_*.csv</code> ファイルを開いて内容を確認してください。❌マークのファイルは正確な撮影日が分かる場合、ファイル名を手動で修正するか、不要なファイルはCSVから該当行を削除してください。</p>



<h3 class="wp-block-heading">手順4：再スキャンで問題解消を確認</h3>



<p>ファイル名を修正した場合は、再度スキャンして問題が解消されているか確認します。</p>



<h3 class="wp-block-heading">手順5：リネーム実行</h3>



<p>問題がなければ、実際のリネームを実行します。</p>



<p>bash</p>



<pre class="wp-block-code"><code>python rename_video.py rename media_analysis_*.csv</code></pre>



<p><strong>⚠️重要：この操作でファイル名が実際に変更されます。必ずバックアップを取ってください。</strong></p>



<p><strong>実行結果例</strong></p>



<p>問題ないファイルは表示されませんが、怪しいファイルだけリストとして出力されます。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="450" src="https://take1bit.com/wp-content/uploads/2025/08/image-21-1024x450.png" alt="" class="wp-image-2071" srcset="https://take1bit.com/wp-content/uploads/2025/08/image-21-1024x450.png 1024w, https://take1bit.com/wp-content/uploads/2025/08/image-21-300x132.png 300w, https://take1bit.com/wp-content/uploads/2025/08/image-21-768x337.png 768w, https://take1bit.com/wp-content/uploads/2025/08/image-21.png 1123w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<pre class="wp-block-code"><code></code></pre>



<h2 class="wp-block-heading">リネーム後の活用</h2>



<p>リネーム後のファイルは <code>YYYY_MM_DD_HH_MM_SS_元のファイル名.拡張子</code> の形式になるため、ファイル名順で自動的に時系列に並びます。</p>



<p><strong>動画編集での活用</strong></p>



<ol class="wp-block-list">
<li>動画編集ソフトでフォルダを開く</li>



<li>ファイル名順で並び替え</li>



<li>全選択して一括インポート</li>
</ol>



<p>これで複数デバイスの素材が時系列で自動的に配置されます！</p>



<h2 class="wp-block-heading">実際の使用事例</h2>



<p><strong>処理したファイル数</strong>: 1,064個（写真・動画）<br><strong>処理時間</strong>: スキャン約3分、リネーム約10秒<br><strong>成功率</strong>: 99.9%（1,063/1,064ファイル）</p>



<ul class="wp-block-list">
<li>iPhone動画・静止画: 完璧に撮影時刻を取得</li>



<li>Android Pixel動画: ファイル名パターンから正確に推定</li>



<li>編集済みファイル: 6個のファイルでファイル名から推定成功</li>



<li>問題ファイル: 1個のみ（手動での修正が必要）</li>
</ul>



<h2 class="wp-block-heading">こんな場面で効果的</h2>



<ul class="wp-block-list">
<li><strong>結婚式やイベント</strong>: 複数カメラで撮影した素材の時系列整理</li>



<li><strong>家族旅行</strong>: みんなで撮った写真・動画をまとめて整理</li>



<li><strong>YouTube動画制作</strong>: 複数デバイスの素材を効率的に管理</li>



<li><strong>フォトブック作成</strong>: 大量の写真を時系列で並び替え</li>
</ul>



<h2 class="wp-block-heading">ダウンロード・技術情報</h2>



<p><strong>GitHub</strong>: <a rel="noopener" target="_blank" href="https://github.com/hiirofish/smart-media-renamer">smart-media-renamer<span class="fa fa-external-link external-icon anchor-icon"></span></a><br><strong>ライセンス</strong>: MIT<br><strong>対応OS</strong>: Windows, macOS, Linux<br><strong>必要環境</strong>: Python 3.6以上、exiftool</p>



<p>Google DriveやiCloudから大量にダウンロードしたファイルの整理に、ぜひ一度スキャンだけでも試してみてください。思っている以上にファイルの日時情報がバラバラになっていることに驚くはずです！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">よくある質問</h2>



<p><strong>Q: バックアップは本当に必要ですか？</strong><br>A: はい、必須です。このツールはファイル名を直接変更するため、元に戻すには手動作業が必要になります。</p>



<p><strong>Q: 処理に時間はかかりますか？</strong><br>A: スキャンには時間がかかりますが、実際のリネームは一瞬です。1,000個のファイルでも数秒で完了します。</p>



<p><strong>Q: どのくらいの精度で判定できますか？</strong><br>A: 実際のテストでは1,064個中1,063個（99.9%）で正確な撮影時刻を取得できました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>保育園の連絡帳をAIで自動デジタル化！写真を撮るだけで検索可能な記録に</title>
		<link>https://take1bit.com/computer-ja/hoiku_json/</link>
		
		<dc:creator><![CDATA[管理者]]></dc:creator>
		<pubDate>Sun, 10 Aug 2025 14:35:29 +0000</pubDate>
				<category><![CDATA[AI・プログラミング]]></category>
		<category><![CDATA[chatGPTプログラミング]]></category>
		<category><![CDATA[生成ＡＩ]]></category>
		<guid isPermaLink="false">https://take1bit.com/?p=2063</guid>

					<description><![CDATA[写真を撮るだけで手書きの連絡帳がデータ化 毎日の保育園の連絡帳、手書きで記録される貴重な成長の記録を、後から見返したいと思ったことはありませんか？ 「○○ちゃんが初めて歩いたのはいつだっけ？」 「あの時の体調不良、どんな [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">写真を撮るだけで手書きの連絡帳がデータ化</h2>



<p>毎日の保育園の連絡帳、手書きで記録される貴重な成長の記録を、後から見返したいと思ったことはありませんか？</p>



<p><strong>「○○ちゃんが初めて歩いたのはいつだっけ？」</strong> <strong>「あの時の体調不良、どんな症状だったかな？」</strong></p>



<p>そんな時、過去の連絡帳を一枚一枚めくって探すのは大変な作業です。</p>



<p>今回ご紹介するシステムを使えば、<strong>連絡帳の写真を撮るだけで、手書きの内容が自動的にデジタルデータに変換され、後から簡単に検索・閲覧できるようになります</strong>。将来的には、スマートフォンアプリとしても活用予定で、お子さんの成長記録をより便利に管理できるツールを目指しています。</p>



<h2 class="wp-block-heading">実際の変換結果</h2>



<h3 class="wp-block-heading">変換前：手書きの連絡帳写真</h3>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="792" src="https://take1bit.com/wp-content/uploads/2025/08/image-20.jpg" alt="" class="wp-image-2064" srcset="https://take1bit.com/wp-content/uploads/2025/08/image-20.jpg 1024w, https://take1bit.com/wp-content/uploads/2025/08/image-20-300x232.jpg 300w, https://take1bit.com/wp-content/uploads/2025/08/image-20-768x594.jpg 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">変換後：構造化されたデータ</h3>



<p>以下のような、コンピューターが理解できる形式のデータに自動変換されます</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>{</p>



<p>&nbsp; &#8220;日付&#8221;: &#8220;10月3日(木)&#8221;,</p>



<p>&nbsp; &#8220;家庭記入欄&#8221;: &#8220;病院受診のためお休みします。鼻水、咳続いていますが、特に悪化していません。&#8221;</p>



<p>}</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>{</p>



<p>&nbsp; &#8220;日付&#8221;: &#8220;10月4日(金)&#8221;,</p>



<p>&nbsp; &#8220;昨日の夕食&#8221;: &#8220;ごはん、汁、牛乳、豆腐、ソーセージ、鳥そぼろ、ヨーグルト&#8221;,</p>



<p>&nbsp; &#8220;朝食&#8221;: &#8220;ごはん、ヨーグルト、牛乳、バナナ&#8221;,</p>



<p>&nbsp; &#8220;家庭記入欄&#8221;: &#8220;風邪症状、特に悪化はしないものの、長引いています…。今朝とても機嫌よいですが、食欲は無いのか、ほとんど食べないばかりでした。&#8221;,</p>



<p>&nbsp; &#8220;保育所記入欄&#8221;: &#8220;園ではよく食べていました。早く体調が良くなるといいですね。今日はお散歩に行きました。お友だちと一緒にねこじゃらしを取ったり、近所の犬を見つけて「ワンワン！！」と言ったり、とっても楽しそうでした。&#8221;</p>



<p>}</p>
</blockquote>



<p>この形式にすることで、「10月の体調不良の記録を探したい」「お散歩の記録だけを見たい」といった検索が瞬時に可能になります。</p>



<h2 class="wp-block-heading">考え方</h2>



<h3 class="wp-block-heading">従来の課題</h3>



<p>保育園の連絡帳をデジタル化する際の最大の難しさは、以下のような複雑さにありました：</p>



<ul class="wp-block-list">
<li><strong>1枚に2日分の記録</strong>が混在している</li>



<li><strong>手書き文字</strong>が枠からはみ出すことが多い</li>



<li><strong>項目と内容の位置関係</strong>が微妙にずれる</li>



<li><strong>文字の判読が困難</strong>な箇所がある</li>
</ul>



<p>これらを従来のプログラムで完璧に処理しようとすると、極めて複雑な設計が必要でした。</p>



<h3 class="wp-block-heading">AI時代の解決策</h3>



<p>今回採用したのは、**「完璧なプログラムを諦め、AIに任せる」**という発想の転換です：</p>



<ul class="wp-block-list">
<li><strong>単純作業</strong>（写真の補正など）→ プログラムが高速処理</li>



<li><strong>複雑な解釈</strong>（手書き文字の理解、文脈の把握）→ AIが自然に処理</li>
</ul>



<p>この役割分担により、人間でも判断に迷うような曖昧な部分を、AIが文脈を理解しながら適切にデータ化してくれます。</p>



<h2 class="wp-block-heading">システムの使い方（技術的な詳細）</h2>



<p>このツールは2つのステップで動作します。ソースコードは<a rel="noopener" target="_blank" href="https://github.com/hiirofish/hoiku-nikki-auto">GitHub<span class="fa fa-external-link external-icon anchor-icon"></span></a>で公開しています。</p>



<p>このツールは、大きく分けて2つのステップで実行します。</p>



<ol class="wp-block-list">
<li><strong>画像の前処理</strong>: 写真から連絡帳の外枠だけを検出し、回転や歪みを補正して切り出す。</li>



<li><strong>文字起こしとJSON化</strong>: 切り出した画像をGeminiに送信し、返ってきた結果をJSONファイルとして保存する。</li>
</ol>



<h3 class="wp-block-heading">ステップ1: 写真の自動補正</h3>



<p>まずは、撮影した連絡帳の写真を、AIが読み取りやすいように整形します。</p>



<p><strong>元画像（例）</strong></p>



<p>元画像には指も入ってますし、縦型で撮影してしまっていますが、問題ありません。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="687" height="946" src="https://take1bit.com/wp-content/uploads/2025/08/image-20-1.jpg" alt="" class="wp-image-2065" srcset="https://take1bit.com/wp-content/uploads/2025/08/image-20-1.jpg 687w, https://take1bit.com/wp-content/uploads/2025/08/image-20-1-218x300.jpg 218w" sizes="(max-width: 687px) 100vw, 687px" /></figure>



<p>このスクリプトは、画像の中から最も大きな四角形（＝連絡帳の外枠）を見つけ出し、自動で回転・台形補正を行い、以下のような整形済み画像を生成します。</p>



<p><strong>整形後の画像（例）</strong></p>



<p>以下のように外枠からある程度余白持った状態で整形します。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="685" src="https://take1bit.com/wp-content/uploads/2025/08/image-20-2.jpg" alt="" class="wp-image-2066" srcset="https://take1bit.com/wp-content/uploads/2025/08/image-20-2.jpg 1024w, https://take1bit.com/wp-content/uploads/2025/08/image-20-2-300x201.jpg 300w, https://take1bit.com/wp-content/uploads/2025/08/image-20-2-768x514.jpg 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h5 class="wp-block-heading">使い方</h5>



<ol class="wp-block-list">
<li>カメラで連絡帳の全体が写るように写真を撮り、任意のフォルダ（例: <code>raw_photos</code>）に保存します。</li>



<li>以下のコマンドを実行すると、保存先フォルダに切り出し画像が生成されます。</li>
</ol>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><code>python sec_cutout.py [元画像フォルダ] [切り出し画像の保存先フォルダ]</code></p>
</blockquote>



<h4 class="wp-block-heading">ステップ2: AIによる文字起こしとデータ化</h4>



<p>次に、整形された画像をAIに読み込ませ、内容をJSONデータに変換します。</p>



<h5 class="wp-block-heading">準備: APIキーの取得</h5>



<p>まず、AIを利用するための準備をします。</p>



<ol class="wp-block-list">
<li><a rel="noopener" target="_blank" href="https://aistudio.google.com/">Google AI Studio<span class="fa fa-external-link external-icon anchor-icon"></span></a> にアクセスし、お持ちのGoogleアカウントでログインします。</li>



<li>「Get API key」から新しいAPIキーを作成します。</li>



<li>プロジェクトのルートディレクトリに <code>gemini_key.txt</code> というファイルを作成し、コピーしたAPIキーを貼り付けて保存します。</li>
</ol>



<h5 class="wp-block-heading">プロンプトとエラー処理</h5>



<p>このスクリプトの心臓部は、<code>geminiapi.py</code> の中に書かれたプロンプト（AIへのお願い文）です。ここで「連絡帳の左右を別々のデータとして、以下の項目を抽出してJSON形式で返してください」といった詳細な指示を与えています。</p>



<p>プロンプトは以下になります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>prompt = (<br>&#8220;これは保育園の手帳の画像です。左右でそれぞれの日のデータがあります。&#8221;<br>&#8220;画像から以下の情報を抽出してください：&#8221;<br>&#8220;1. 日付：日付が書いてある場合のみ記載。曜日が書いていない場合は補足。&#8221;<br>&#8220;2. 昨日の夕食：記載がなければ項目自体を含めないでください。&#8221;<br>&#8220;3. 朝食：記載がなければ項目自体を含めないでください。&#8221;<br>&#8220;4. 家庭記入欄：上側の文章部分。記載がなければ項目自体を含めないでください。&#8221;<br>&#8220;5. 保育所記入欄：下側の文章部分。記載がなければ項目自体を含めないでください。&#8221;<br>&#8220;\n&#8221;<br>&#8220;左右のページをそれぞれ1つのJSONオブジェクトとし、配列として返してください。&#8221;<br>&#8220;食事の内容は「、」で区切った自然な表記にしてください。&#8221;<br>&#8220;読み取れない文字は適切な代替で置き換えてください。&#8221;<br>&#8220;家庭記入欄と保育所記入欄は改行を含めず、自然な日本語の文章にしてください。&#8221;<br>&#8220;JSONとして正確なフォーマットで返してください。&#8221;<br>)</p>
</blockquote>



<h5 class="wp-block-heading">使い方</h5>



<p>以下のコマンドを実行します。<code>--input</code>にはステップ1で作成したフォルダを指定します。<br>実行後、inputフォルダに_jsonという名前を付けたフォルダが作られ、そこに１日ごとにjsonファイルが生成されます。</p>



<ol class="wp-block-list"></ol>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><code>python batch_daycare.py --input [切り出し画像フォルダ] </code></p>
</blockquote>



<h3 class="wp-block-heading">この技術が拓く未来</h3>



<p>今回の体験から、「完璧なプログラム」ではなく「AIと人間の協力」というアプローチが、現実の複雑な問題解決に極めて有効であることがわかりました。</p>



<p>手書き文字が多少崩れていても、枠からはみ出していても、AIが文脈を理解して自然な日本語として再構成し、さらに構造化されたデータに変換してくれる様子は、まさに技術革新を感じさせます。</p>



<h3 class="wp-block-heading">今後の展開予定</h3>



<ul class="wp-block-list">
<li><strong>検索機能付きWebアプリ</strong>の開発</li>



<li><strong>スマートフォンアプリ</strong>での撮影から保存まで一括処理</li>



<li><strong>成長記録の可視化機能</strong>（グラフ表示など）</li>



<li><strong>家族間での記録共有機能</strong></li>
</ul>



<p>保育園の連絡帳だけでなく、様々な手書き記録のデジタル化にも応用できる可能性を秘めています。</p>



<h2 class="wp-block-heading">前回の記事について</h2>



<p>以前、保育園の連絡帳をAIで読み取る試みについて2本の記事を書きました。</p>



<ol class="wp-block-list">
<li><a href="https://take1bit.com/computer-ja/hoiku2/">【Computer】保育園の連絡帳をデジタル化したい！OCR編</a></li>



<li><a href="https://take1bit.com/computer-ja/hoiku_ocr/">【Computer】保育園の連絡帳のOCRはGeminiが最強だった</a></li>
</ol>



<p>様々な方法を検証した結果、GoogleのGemini APIを使用する方法が最も精度が高く実用的であることが分かり、今回の実用的な自動化システムの構築につながりました。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><strong>興味のある方は、ぜひ<a rel="noopener" target="_blank" href="https://github.com/hiirofish/hoiku-nikki-auto">GitHub<span class="fa fa-external-link external-icon anchor-icon"></span></a>のコードをご覧ください。技術的な質問やご意見もお待ちしています。</strong></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【解決】VRAM 8GBで大規模LLMが動く！LM StudioとWSL連携の完全ガイド</title>
		<link>https://take1bit.com/computer-ja/gpt-oss-20b_lv_studio/</link>
		
		<dc:creator><![CDATA[管理者]]></dc:creator>
		<pubDate>Sat, 09 Aug 2025 12:39:48 +0000</pubDate>
				<category><![CDATA[AI・プログラミング]]></category>
		<category><![CDATA[生成ＡＩ]]></category>
		<guid isPermaLink="false">https://take1bit.com/?p=2043</guid>

					<description><![CDATA[はじめに この記事では、ローカルPCで手軽に大規模言語モデル（LLM）を試せる「LM Studio」を使い、20B（200億パラメータ）クラスのオープンソースLLM（本記事では openai/gpt-oss-20b とし [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">はじめに</h2>



<p>この記事では、ローカルPCで手軽に大規模言語モデル（LLM）を試せる「LM Studio」を使い、20B（200億パラメータ）クラスのオープンソースLLM（本記事では <code>openai/gpt-oss-20b</code> として表示されるモデル）を <strong>VRAM 8GB</strong> の <code>RTX 3060 Ti</code> で動作させた事例を紹介します。</p>



<p>また、Windows上で起動したLM Studioのサーバー機能に対し、WSL (Windows Subsystem for Linux) 2からアクセスする際に少し工夫が必要だったため、その手順も詳しく解説します。</p>



<h2 class="wp-block-heading">環境</h2>



<p><strong>ハードウェア</strong></p>



<ul class="wp-block-list">
<li><strong>GPU</strong>: NVIDIA RTX 3060 Ti (<strong>8GB</strong>)</li>



<li><strong>CPU</strong>: Intel Core i7-12700</li>



<li><strong>メモリ</strong>: 32GB (16GBでも十分動作すると思われます)</li>
</ul>



<p><strong>ソフトウェア</strong></p>



<ul class="wp-block-list">
<li><strong>OS</strong>: Windows 11</li>



<li><strong>WSL</strong>: WSL2 (Ubuntu)</li>



<li><strong>LLM実行環境</strong>: LM Studio 0.3.x</li>



<li><strong>モデル</strong>: 20BクラスのLLM（GGUF形式、GPUオフロード使用）</li>
</ul>



<h2 class="wp-block-heading">LM Studioの使い方</h2>



<h3 class="wp-block-heading">ダウンロードとインストール</h3>



<p>以下のサイトからダウンロードします。<br><a rel="noopener" target="_blank" href="https://lmstudio.ai/">https://lmstudio.ai/<span class="fa fa-external-link external-icon anchor-icon"></span></a></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="791" height="530" src="https://take1bit.com/wp-content/uploads/2025/08/image-8.png" alt="" class="wp-image-2045" srcset="https://take1bit.com/wp-content/uploads/2025/08/image-8.png 791w, https://take1bit.com/wp-content/uploads/2025/08/image-8-300x201.png 300w, https://take1bit.com/wp-content/uploads/2025/08/image-8-768x515.png 768w" sizes="(max-width: 791px) 100vw, 791px" /></figure>



<p>3つの選択肢が出てきますが、後から変更できますので、デフォルトのDeveloperを選択します。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="569" height="345" src="https://take1bit.com/wp-content/uploads/2025/08/image-10.png" alt="" class="wp-image-2047" srcset="https://take1bit.com/wp-content/uploads/2025/08/image-10.png 569w, https://take1bit.com/wp-content/uploads/2025/08/image-10-300x182.png 300w" sizes="(max-width: 569px) 100vw, 569px" /></figure>



<p>以下のOSSをDLするように勧められるので一旦、これをDLします。12GBあるのでしばらく待ちます。</p>



<p></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="792" height="419" src="https://take1bit.com/wp-content/uploads/2025/08/image-9.png" alt="" class="wp-image-2046" srcset="https://take1bit.com/wp-content/uploads/2025/08/image-9.png 792w, https://take1bit.com/wp-content/uploads/2025/08/image-9-300x159.png 300w, https://take1bit.com/wp-content/uploads/2025/08/image-9-768x406.png 768w" sizes="(max-width: 792px) 100vw, 792px" /></figure>



<p>完了したら、画面上部にgpt-oss-20bが表示されていることを確認します。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="943" height="569" src="https://take1bit.com/wp-content/uploads/2025/08/image-11.png" alt="" class="wp-image-2048" srcset="https://take1bit.com/wp-content/uploads/2025/08/image-11.png 943w, https://take1bit.com/wp-content/uploads/2025/08/image-11-300x181.png 300w, https://take1bit.com/wp-content/uploads/2025/08/image-11-768x463.png 768w" sizes="(max-width: 943px) 100vw, 943px" /></figure>



<p>以下のように回答が返ってくればOK。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="931" height="570" src="https://take1bit.com/wp-content/uploads/2025/08/image-12.png" alt="" class="wp-image-2049" srcset="https://take1bit.com/wp-content/uploads/2025/08/image-12.png 931w, https://take1bit.com/wp-content/uploads/2025/08/image-12-300x184.png 300w, https://take1bit.com/wp-content/uploads/2025/08/image-12-768x470.png 768w" sizes="(max-width: 931px) 100vw, 931px" /></figure>



<h3 class="wp-block-heading">うんちく</h3>



<p><br>ここで特筆なのが、GPUメモリが8GBしかないのに動作した点です。11token/s程度ですが、20bのモデルが動くことがすごい。</p>



<p>これには量子化という技術が使われています。単純計算だと、FP16だと200億パラメータ (20b)だと200億パラメータ＊２バイトなので、40GBのgpuメモリが必要です。全然足りていません。パラメータサイズを16bitから4bitに下げることで、1/4程度の10GBになります。ですが、今回は8GBしかないので、それでも足りません。</p>



<p>それに加えて、LM StudioはGPUオフロードという機能を使っていて、VRAMと通常のＲＡＭを併用して足りていないところを一般メモリを代替して動作させます。GPUとRAM間の通信が発生するので遅くなってしまいますが、動作するということです。それでも、20bが11token/sで動くことがとんでもない。なので、GPUスペックがいまいちという方は性能が落ちますが、LM Studioを使うことで体験することは可能です。</p>



<p>ちなみにLM StudioはRAG(拡張検索）が５つまでのファイルに対応しています。手持ちファイルから情報を入手したり調べる方法です。これを使えば、手順書を入れて、ローカルで読み込むということもできます。クラウドだとNotebook LMのような機能にあたります。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1005" height="766" src="https://take1bit.com/wp-content/uploads/2025/08/image-15.png" alt="" class="wp-image-2052" srcset="https://take1bit.com/wp-content/uploads/2025/08/image-15.png 1005w, https://take1bit.com/wp-content/uploads/2025/08/image-15-300x229.png 300w, https://take1bit.com/wp-content/uploads/2025/08/image-15-768x585.png 768w" sizes="(max-width: 1005px) 100vw, 1005px" /></figure>



<h2 class="wp-block-heading">外部アプリからアクセスする方法（windows)</h2>



<p>LM Studioは、OpenAI API互換のサーバー機能を持っています。これを有効にすることで、自作のアプリケーションからLLMを呼び出せます。</p>



<p>Status RunningというチェックボックスをONにします。モデルは先ほどすでにgpt-oss-20bがセットされてると思いますので、これだけで準備完了です。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="930" height="632" src="https://take1bit.com/wp-content/uploads/2025/08/image-14.png" alt="" class="wp-image-2051" srcset="https://take1bit.com/wp-content/uploads/2025/08/image-14.png 930w, https://take1bit.com/wp-content/uploads/2025/08/image-14-300x204.png 300w, https://take1bit.com/wp-content/uploads/2025/08/image-14-768x522.png 768w" sizes="(max-width: 930px) 100vw, 930px" /></figure>



<h2 class="wp-block-heading">WSLの設定</h2>



<p><em>C:\Users\&lt;ユーザー名>\.wslconfig</em><br>このファイルに以下の設定をすることでwslも同じネットワークに参加することができます。わざわざ、別のネットワークからアクセスする必要なかったです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p> [wsl2]<br> networkingMode=mirrored</p>
</blockquote>



<p>以下の内容を備忘録として残してますが、大半は不要です。wslで実行というところまで飛んでください。</p>



<h2 class="wp-block-heading">以下はwslを外部ネットワーク（デフォルト）にしたまま使う場合</h2>



<p>次にPowershellから以下のコマンドを打ちます。Rechable atの部分にアドレスが表示されているので、127.0.0.1:1234を使って、疎通ができるかを確認します。ちなみに、このアドレスはlocalhostでも同じです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Invoke-RestMethod -Uri http://127.0.0.1:1234/v1/models</p>
</blockquote>



<p>以下のような結果が返ってくればOK。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>{@{id=openai/gpt-oss-20b; object=model; owned_by=organization_owner}, @{id=text-embedding-nomic-embed-text-v1.5; obj…</p>
</blockquote>



<p>次に、curlの部分にサンプルプログラムがあるので、これを実行してみます。curlも使えますが、powre shellなので少しだけ弄って。以下のようなコードを実行します。貼り付けするだけです。コマンドが切れた場合はENTERを押してください。</p>



<pre class="wp-block-code"><code>$headers = @{"Content-Type" = "application/json"}
$body = @{
    model = "openai/gpt-oss-20b"
    messages = @(
        @{
            role = "system"
            content = "Always answer in rhymes. Today is Thursday"
        },
        @{
            role = "user"
            content = "What day is it today?"
        }
    )
    temperature = 0.7
    max_tokens = 100
    stream = $false
} | ConvertTo-Json -Depth 10

$response = Invoke-RestMethod -Uri "http://localhost:1234/v1/chat/completions" -Method Post -Headers $headers -Body $body
$response.choices&#91;0].message.content</code></pre>



<p>以下のようにあ回答が返ってくると思います。とりあえず、win上では動作しましたね。ようやく本題ですが、wslのpythonから動作するようにします。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>PS C:\Users\hiiro&gt; $response.choices[0].message.content<br>It’s Thursday, not a Monday or a Tuesday—<br>A mid‑week pause before the weekend’s easy sway!</p>
</blockquote>



<p>LM Studioはモデルをロードしてからバックグランドで動作し続けますので不要になったらタスクマネージャから終了したほうが良いかもしれません。（右下のバックグランドアプリのランチャーからでも終了させることができます。）</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="653" height="169" src="https://take1bit.com/wp-content/uploads/2025/08/image-17.png" alt="" class="wp-image-2056" srcset="https://take1bit.com/wp-content/uploads/2025/08/image-17.png 653w, https://take1bit.com/wp-content/uploads/2025/08/image-17-300x78.png 300w" sizes="(max-width: 653px) 100vw, 653px" /></figure>



<p></p>



<h2 class="wp-block-heading">外部アプリからアクセスする方法（WSL)</h2>



<p>ここからが本題です。WSLからWindowsホストで実行中のLM Studioにアクセスするには、ネットワークとファイアウォールの設定が必要です</p>



<h3 class="wp-block-heading">wslから見たときのwindowsホストのIPアドレス</h3>



<p>まず、Windows側で<code>ipconfig</code>コマンドを実行し、WSL用の仮想ネットワークアダプターのIPアドレスを調べます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>ipconfig</p>
</blockquote>



<p>以下のよう仮想アドレスが表示されるはずです。これに対して設定をしていきます。<br>この<code>172.23.x.1</code>がWSLから接続する際に使用するIPアドレスです。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="692" height="138" src="https://take1bit.com/wp-content/uploads/2025/08/image-16.png" alt="" class="wp-image-2054" srcset="https://take1bit.com/wp-content/uploads/2025/08/image-16.png 692w, https://take1bit.com/wp-content/uploads/2025/08/image-16-300x60.png 300w" sizes="(max-width: 692px) 100vw, 692px" /></figure>



<h3 class="wp-block-heading">ポートフォワーディング設定</h3>



<p>LM Studioのサーバーは、セキュリティのため <code>127.0.0.1</code> (localhost) からのアクセスしか受け付けません。そこで、WSLから <code>172.23.16.1:1234</code> に来た通信を、Windowsが <code>127.0.0.1:1234</code> に転送するよう設定します。</p>



<p><strong>管理者として開いたPowerShell</strong>で、以下のコマンドを実行します。<code>listenaddress</code>には先ほど控えたIPアドレスを指定してください。。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>netsh interface portproxy add v4tov4 listenaddress=172.23.16.1 listenport=1234 connectaddress=127.0.0.1 connectport=1234</p>
</blockquote>



<p>実施後、以下コマンドで確認します。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>netsh interface portproxy show all</p>
</blockquote>



<p>以下のような結果になればwslからの1234ポートに対してポートフォワーディング設定の感k量です。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Listen on ipv4: Connect to ipv4:</p>



<p>Address Port Address Port<br>&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;-<br>172.23.16.1 1234 127.0.0.1 1234</p>
</blockquote>



<h2 class="wp-block-heading">ファイアウォール設定</h2>



<p>wsl上で同様にコマンドを叩いてもうまくいきません、まずはファイヤウォールの設定を見てみます。以下のようにTCP/UDPクエリーがブロックされてしまっていました。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Get-NetFirewallRule -DisplayName &#8220;*LM Studio*&#8221; <br><br> Name: TCP Query User{&#8230;}C:\users\hiiro\&#8230;\lm studio.exe Action: Block ← これが問題だった！<br> Name: UDP Query User{&#8230;}C:\users\hiiro\&#8230;\lm studio.exe Action: Block ← これも問題！</p>
</blockquote>



<p>そこで以下のようにブロックルールを削除してから、変更します。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Remove-NetFirewallRule -DisplayName &#8220;lm studio.exe&#8221;</p>
</blockquote>



<p>次に、WSLのIPアドレス帯域からのみTCPポート<code>1234</code>への内向き通信を許可する、新しいルールを作成します。これによりセキュリティが向上します。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>New-NetFirewallRule -DisplayName &#8220;LM Studio WSL Only&#8221; -Direction Inbound -Protocol TCP -LocalPort 1234 -RemoteAddress 172.23.0.0/16 -Action Allow</p>
</blockquote>



<p>確認するためのコマンドは以下の二つです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Get-NetFirewallRule -DisplayName &#8220;LM Studio WSL Only&#8221; | Format-List DisplayName, RemoteAddress, Action<br><br>Get-NetFirewallRule -DisplayName &#8220;LM Studio WSL Only&#8221; | Get-NetFirewallAddressFilter</p>
</blockquote>



<p>この実行結果はいかのようになります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>PS C:\Users\hiiro&gt; Get-NetFirewallRule -DisplayName &#8220;LM Studio WSL Only&#8221; | Format-List DisplayName, RemoteAddress, Action</p>



<p>DisplayName : LM Studio WSL Only<br>Action : Allow</p>



<p>PS C:\Users\hiiro&gt; Get-NetFirewallRule -DisplayName &#8220;LM Studio WSL Only&#8221; | Get-NetFirewallAddressFilter</p>



<p>LocalAddress : Any<br>RemoteAddress : 172.23.0.0/255.255.0.0</p>
</blockquote>



<h2 class="wp-block-heading">wslで実行</h2>



<p>以上の設定が終われば、curlコマンドで確認しましょう。</p>



<p>wslでmirroreの設定をした場合</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>curl http://localhost:1235/v1/models</p>
</blockquote>



<p>設定しなかった場合はこちら。</p>



<pre class="wp-block-code"><code>curl http://172.23.16.1:1234/v1/models</code></pre>



<p>以下のjsonが返却されれば設定はOKです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><br>{<br>&#8220;data&#8221;: [<br>{<br>&#8220;id&#8221;: &#8220;openai/gpt-oss-20b&#8221;,<br>&#8220;object&#8221;: &#8220;model&#8221;,<br>&#8220;owned_by&#8221;: &#8220;organization_owner&#8221;<br>},<br>{<br>&#8220;id&#8221;: &#8220;text-embedding-nomic-embed-text-v1.5&#8221;,<br>&#8220;object&#8221;: &#8220;model&#8221;,<br>&#8220;owned_by&#8221;: &#8220;organization_owner&#8221;<br>}<br>],<br>&#8220;object&#8221;: &#8220;list&#8221;</p>
</blockquote>



<p>次に簡単なpythonコードをで動作確認します。サンプルコードを添付します。アドレスはPC環境ごとによって変わります。</p>



<pre class="wp-block-code"><code>#!/usr/bin/env python3
"""
シンプルなLM Studio性能測定スクリプト
"""

import requests
import time
import sys

def test_lm_studio(prompt, base_url="http://172.23.16.1:1234", max_tokens=100):
    """LM Studioにリクエストを送信して性能を測定"""
    
    headers = {"Content-Type": "application/json; charset=utf-8"}
    data = {
        "model": "openai/gpt-oss-20b",
        "messages": &#91;
            {"role": "user", "content": prompt}
        ],
        "temperature": 0.7,
        "max_tokens": max_tokens,
        "stream": False
    }
    
    print(f"\nPrompt: {prompt}")
    print("-" * 50)
    
    start_time = time.time()
    
    try:
        response = requests.post(
            f"{base_url}/v1/chat/completions",
            headers=headers,
            json=data,
            timeout=60
        )
        response.raise_for_status()
        end_time = time.time()
        
        result = response.json()
        content = result&#91;'choices']&#91;0]&#91;'message']&#91;'content']
        
        # トークン情報
        usage = result.get('usage', {})
        completion_tokens = usage.get('completion_tokens', 0)
        total_time = end_time - start_time
        tokens_per_second = completion_tokens / total_time if total_time &gt; 0 else 0
        
        # 結果表示
        print(f"Response: {content}")
        print("-" * 50)
        print(f"Time: {total_time:.2f}s")
        print(f"Tokens: {completion_tokens}")
        print(f"Speed: {tokens_per_second:.1f} tokens/s")
        
        return tokens_per_second
        
    except Exception as e:
        print(f"Error: {e}")
        return 0

def main():
    # 接続確認
    base_url = "http://172.23.16.1:1234"
    
    try:
        response = requests.get(f"{base_url}/v1/models", timeout=2)
        if response.status_code == 200:
            print(f"✓ Connected to LM Studio at {base_url}")
        else:
            print("Error: Cannot connect to LM Studio")
            sys.exit(1)
    except:
        print("Error: Cannot connect to LM Studio")
        print("Make sure LM Studio is running and the IP is correct")
        sys.exit(1)
    
    # テスト実行
    print("\n" + "=" * 50)
    print("LM Studio Simple Benchmark")
    print("=" * 50)
    
    # いくつかのプロンプトをテスト
    prompts = &#91;
        ("Hello, how are you?", 50),
        ("Pythonで素数を判定する関数を書いて", 100),
        ("AIの利点を3つ挙げて", 100),
    ]
    
    speeds = &#91;]
    for prompt, max_tokens in prompts:
        speed = test_lm_studio(prompt, base_url, max_tokens)
        if speed &gt; 0:
            speeds.append(speed)
        print()
    
    # 平均速度
    if speeds:
        print("=" * 50)
        print(f"Average speed: {sum(speeds)/len(speeds):.1f} tokens/s")
        print("=" * 50)

if __name__ == "__main__":
    # コマンドライン引数があればそれを使用
    if len(sys.argv) &gt; 1:
        prompt = " ".join(sys.argv&#91;1:])
        test_lm_studio(prompt)
    else:
        main()</code></pre>



<p>結果、平均で <code>8.4 tokens/s</code> となりました。チャットでの利用には少し待たされる感じはありますが、VRAM 8GBのGPUでこれだけの規模のモデルがローカルで動くというのは驚きです。</p>



<p>参考までに、RTX 4080 Laptop(12GB)で試したところ、20token/s程度でした。20tokenあれば、一般的な簡潔な回答が１００字程度だとすると、５秒程度待つ感じですね。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="831" src="https://take1bit.com/wp-content/uploads/2025/08/image-19-1024x831.png" alt="" class="wp-image-2059" srcset="https://take1bit.com/wp-content/uploads/2025/08/image-19-1024x831.png 1024w, https://take1bit.com/wp-content/uploads/2025/08/image-19-300x243.png 300w, https://take1bit.com/wp-content/uploads/2025/08/image-19-768x623.png 768w, https://take1bit.com/wp-content/uploads/2025/08/image-19.png 1029w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">まとめ</h2>



<ul class="wp-block-list">
<li>LM Studioは<strong>量子化</strong>と<strong>GPUオフロード</strong>機能により、VRAMが8GBのような比較的少ない環境でも20BクラスのLLMを動作させることができた。</li>



<li>WSLからWindowsホスト上のLM Studioサーバーにアクセスするには、<code>netsh</code>による<strong>ポートフォワーディング</strong>と、<strong>ファイアウォール</strong>の許可設定が必要だった。</li>



<li>20Bクラスのモデルは、少し前の<code>gpt-3.5-turbo</code>に匹敵する、あるいはそれ以上の応答品質を感じることもあり、ローカルマシンでプライベートなLLM体験を楽しむ選択肢として非常に有望だと感じた。</li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>YouTube動画200本をAPI自動化でHP掲載</title>
		<link>https://take1bit.com/computer-ja/youtube_data_api_llm/</link>
		
		<dc:creator><![CDATA[管理者]]></dc:creator>
		<pubDate>Fri, 08 Aug 2025 14:36:39 +0000</pubDate>
				<category><![CDATA[AI・プログラミング]]></category>
		<category><![CDATA[chatGPTプログラミング]]></category>
		<category><![CDATA[トックリツバメ観察]]></category>
		<category><![CDATA[生成ＡＩ]]></category>
		<guid isPermaLink="false">https://take1bit.com/?p=2014</guid>

					<description><![CDATA[YouTubeチャンネルの動画が200本を超えると、再生リストの管理や動画の整理が大変になります。YouTube Studioだけでは一覧性に欠け、どの動画がどの再生リストに属しているか把握するのも困難です。 そこで今回 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>YouTubeチャンネルの動画が200本を超えると、再生リストの管理や動画の整理が大変になります。YouTube Studioだけでは一覧性に欠け、どの動画がどの再生リストに属しているか把握するのも困難です。</p>



<p>そこで今回は、YouTube APIを使って全動画情報を自動取得し、ホームページ掲載用のデータを効率的に作成する方法をご紹介します。この手法により、手作業でのコピペ作業から解放され、動画管理が格段に楽になります。</p>



<h2 class="wp-block-heading">目的</h2>



<p>主な目的は以下の2つです。</p>



<ol start="1" class="wp-block-list">
<li><strong>再生リストの管理</strong>: 動画が意図した再生リストに属しているか、あるいはどの再生リストにも属していない「迷子」の動画がないか、一覧で確認したかった。</li>



<li><strong>ウェブサイトへの掲載</strong>: YouTubeの再生リストはかなり使いづらいので、自身のウェブサイトに動画一覧を掲載して分かりやすくしたかった。そのためには、各動画の「タイトル」「URL」「説明文」などの情報が必要でした。</li>
</ol>



<p>最終的には、この方法で出力したCSVファイルを使い、LLM（大規模言語モデル）にウェブサイト掲載用のMarkdownリストを自動生成させれば、いちいち手作業でコピペする必要がなくなると考えました。</p>



<h3 class="wp-block-heading">使用するYouTube APIについて</h3>



<p>まず、YouTubeのAPIには大きく分けて2種類あります。</p>



<ul class="wp-block-list">
<li><strong>YouTube Data API v3</strong>: チャンネル、動画、再生リスト、コメントといったYouTubeの「データ」を取得・操作するためのAPIです。例えば、「チャンネルの全動画リスト」「動画のタイトルや再生回数」「どの再生リストにどの動画が入っているか」といった情報を取得できます。<strong>今回使用するのは、主にこちらのAPIです。</strong></li>
</ul>



<p></p>



<ul class="wp-block-list">
<li><strong>YouTube Analytics API</strong>: 視聴者維持率、トラフィックソース、視聴者のデモグラフィック（年齢層・性別）など、自身のチャンネルに関するより詳細な「分析データ」を取得するためのAPIです。いわゆる「アナリティクス」画面の情報を、プログラムで一括取得したい場合に使います。</li>
</ul>



<p>今回は、動画の基本情報や再生リストとの関連性を取得することが目的なので、<strong>YouTube Data API v3</strong> を使います。</p>



<h2 class="wp-block-heading">完成イメージ</h2>



<h3 class="wp-block-heading">成果物</h3>



<p>今回の作成した成果物は以下のページになります。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-take-1-bit wp-block-embed-take-1-bit"><div class="wp-block-embed__wrapper">
https://take1bit.com/tsubame/koshiaka_part2/
</div></figure>



<h3 class="wp-block-heading">取得できるデータ一覧 </h3>



<p>&#8211; 公開日、タイトル、動画URL <br>&#8211; 再生回数、高評価数、コメント数 <br>&#8211; 動画の長さ、所属再生リスト <br>&#8211; タグ、サムネイルURL、説明文</p>



<h2 class="wp-block-heading">手順</h2>



<h3 class="wp-block-heading">step1. 準備：Google Cloud PlatformでのAPI設定 （所要時間：約15分）</h3>



<p>このスクリプトはYouTube Data API v3を利用するため、はじめにGoogle Cloudでの準備が必要です。この程度であれば無料枠で十分できますので、費用はかかりません。</p>



<ol start="1" class="wp-block-list">
<li><strong>Google Cloudプロジェクトの作成</strong>: <a rel="noopener" target="_blank" href="https://console.cloud.google.com/">Google Cloud Console<span class="fa fa-external-link external-icon anchor-icon"></span></a>にアクセスし、新しいプロジェクトを作成します（既存のプロジェクトでもOKです）。</li>



<li><strong>APIの有効化</strong>: 作成したプロジェクトで「YouTube Data API v3」を検索し、有効化します。<br><img decoding="async" src="https://take1bit.com/wp-content/uploads/2025/08/image.png" alt=""></li>
</ol>



<p></p>



<ol start="1" class="wp-block-list">
<li><strong>認証情報の作成</strong>:
<ul class="wp-block-list">
<li>「APIとサービス」&gt;「認証情報」に進みます。</li>



<li>「+ 認証情報を作成」から「OAuth クライアント ID」を選択します。<br><img decoding="async" src="https://take1bit.com/wp-content/uploads/2025/08/image-1.png" alt=""></li>



<li>アプリケーションの種類で「<strong>デスクトップアプリ</strong>」を選び、名前を付けて作成します。<br><img decoding="async" src="https://take1bit.com/wp-content/uploads/2025/08/image-2.png" alt=""></li>



<li>作成が完了すると、<code>client.json</code> というファイルをダウンロードできるようになります。これを後ほど使います。<br><img decoding="async" src="https://take1bit.com/wp-content/uploads/2025/08/image-3.png" alt=""></li>
</ul>
</li>
</ol>



<h3 class="wp-block-heading">step2. 環境構築（所要時間：約10分）</h3>



<p>次に、ローカル環境でスクリプトを実行する準備をします。Pythonで作成しているため、Windows/Mac/Linuxで動作します。ソースコードはこちらになります。</p>



<p><a rel="noopener" target="_blank" href="https://github.com/hiirofish/youtube-video-list">https://github.com/hiirofish/youtube-video-list<span class="fa fa-external-link external-icon anchor-icon"></span></a></p>



<h5 class="wp-block-heading"><strong>リポジトリのクローン</strong></h5>



<p> ターミナル（コマンドプロンプト）で以下のコマンドを実行し、ファイルをダウンロードし、google関連のライブラリをインストールします。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><code>git clone https://github.com/hiirofish/youtube-video-list.git</code></p>



<p><code>cd youtube-video-list</code></p>



<p><code>pip install -r requirements.txt</code></p>
</blockquote>



<p></p>



<h5 class="wp-block-heading"><strong><code>client.json</code>の配置</strong>: </h5>



<p>先ほどGoogle Cloudからダウンロードした <code>client.json</code> ファイルを、この<code>youtube-video-list</code>フォルダの中に移動させます。</p>



<h4 class="wp-block-heading"><strong>チャンネルIDの設定</strong>:</h4>



<p> <code>youtube-video-list</code>フォルダ内に <code>channel_id.txt</code> という名前で新しいファイルを作成します。そのファイルの中に、情報を取得したいご自身のYouTubeチャンネルIDを一行だけ記述して保存してください。</p>



<p><strong>【チャンネルIDの確認方法】</strong></p>



<ul class="wp-block-list">
<li><strong>一番簡単な方法</strong>: チャンネルのトップページURLが <code>https://www.youtube.com/channel/UCxxxxxxxx</code> のような形式の場合、<code>/channel/</code> の後にある <code>UC</code> から始まる文字列がIDです。</li>



<li><strong>ご自身のチャンネルの場合</strong>: <a rel="noopener" target="_blank" href="https://studio.youtube.com/">YouTube Studio<span class="fa fa-external-link external-icon anchor-icon"></span></a> &gt;「カスタマイズ」&gt;「基本情報」で確認できます。</li>
</ul>



<h3 class="wp-block-heading">step3. データ取得（所要時間：約5分）</h3>



<ol start="1" class="wp-block-list"></ol>



<p>全ての準備が整ったら、以下のコマンドでスクリプトを実行します。</p>



<pre class="wp-block-code"><code>python youtube_video_list.py
</code></pre>



<p>ブラウザが起動すると、緑の矢印にURLアドレスが表示されるので、YouTube Data APIを有効にしたGoogleアカウントでの認証を求められます。一旦許可すると、token.jsonというファイルが生成されるので、２回目以降はこの作業は省略できます。処理が完了すると、フォルダ内に <code>youtube_master_list.csv</code> というファイルが生成されます。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="551" height="166" src="https://take1bit.com/wp-content/uploads/2025/08/image-5.png" alt="" class="wp-image-2037" srcset="https://take1bit.com/wp-content/uploads/2025/08/image-5.png 551w, https://take1bit.com/wp-content/uploads/2025/08/image-5-300x90.png 300w" sizes="(max-width: 551px) 100vw, 551px" /></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>The authentication flow has completed. You may close this window.</p>
</blockquote>



<h3 class="wp-block-heading">取得できるCSVファイルについて</h3>



<p>スクリプトが完了すると、以下のような情報を含んだ <code>youtube_master_list.csv</code> が生成されます。GoogleスプレッドシートやExcelで開けば、ソートやフィルタリングも簡単に行えるため、再生リストが空欄になっている「迷子」の動画を探すのも一目瞭然です。</p>



<ul class="wp-block-list">
<li>公開日</li>



<li>タイトル</li>



<li>動画URL</li>



<li>再生回数</li>



<li>高評価数</li>



<li>コメント数</li>



<li>動画の長さ</li>



<li>所属再生リスト</li>



<li>タグ</li>



<li>サムネイルURL</li>



<li>説明文</li>
</ul>



<p>csvファイルをGoogle Driveにアップロードして、スプレッドシートとして開くと以下のように見やすい形になります</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="392" src="https://take1bit.com/wp-content/uploads/2025/08/image-4-1024x392.png" alt="" class="wp-image-2020" srcset="https://take1bit.com/wp-content/uploads/2025/08/image-4-1024x392.png 1024w, https://take1bit.com/wp-content/uploads/2025/08/image-4-300x115.png 300w, https://take1bit.com/wp-content/uploads/2025/08/image-4-768x294.png 768w, https://take1bit.com/wp-content/uploads/2025/08/image-4.png 1203w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>その後は、ご自身の用途に合わせてデータを活用してください</p>



<h2 class="wp-block-heading">wordpress用のホームページ作成</h2>



<p>以下はプロンプトの参考例です。再生リストが「<code>トックリツバメのヒナ 成長の瞬間【ショートハイライト】</code>」で、開始番号がDAY56移行の動画をwordpressにコピペで貼り付けできるようにした例です。youtube内の説明の１行に軽いコメントを毎回入れているので、それを抜き出して貼り付けするようにしてます。これを<code>youtube_master_list</code>.csvを添付して実行するだけです。claude sonnet 4を使ってます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>YouTubeマスターリストCSVファイルから、特定の再生リストのDay XX以降の動画を抽出し、WordPress（Gutenberg）用のMarkdownコードを生成します。</p>



<h3 class="wp-block-heading">必要な情報</h3>



<ol class="wp-block-list">
<li><strong>対象再生リスト名</strong>: （例：<code>トックリツバメのヒナ 成長の瞬間【ショートハイライト】</code>）</li>



<li><strong>開始Day番号</strong>: （例：56）</li>



<li><strong>CSVファイル</strong>: YouTube APIで取得した動画マスターリスト</li>
</ol>



<h3 class="wp-block-heading">出力形式</h3>



<p>markdown</p>



<pre class="wp-block-code"><code>## 観察記録 セカンド

### Day XX
#### 「」内タイトル
説明文の先頭行
&#91;!&#91;サムネイル](URL)](動画URL)</code></pre>



<h3 class="wp-block-heading">プロンプト</h3>



<pre class="wp-block-code"><code>添付されたYouTubeマスターリストCSVから、「{再生リスト名}」のDay {開始番号}以降の動画を対象に、WordPress Gutenberg用のMarkdownコードを生成してください。

【処理手順】
1. CSVを読み込み、指定した再生リストの動画のみを抽出
2. タイトルからDay番号を抽出（正規表現: /Day\s*(\d+)/i）
3. タイトルから「」内のテキストを抽出（正規表現: /「(&#91;^」]+)」/）
4. 説明文の先頭行を抽出（改行で分割して最初の行）
5. Day番号でソート・グループ化
6. 指定した開始番号以降の動画のみを対象とする

【出力構造】
- H2: "観察記録 セカンド"
- H3: "Day XX"（Day番号のみ）
- H4: 「」内のタイトルテキスト
- コメント: 説明文の先頭行
- 画像リンク: `&#91;!&#91;タイトル サムネイル](サムネイルURL)](動画URL)`

【注意点】
- 同じDay番号に複数動画がある場合は、H3の下にH4を複数配置
- Day番号順に並べる
- Markdown形式で出力（Gutenbergで編集しやすくするため）
- 「」がないタイトルの場合はタイトル全体を使用

再生リスト名: {ここに再生リスト名を入力}
開始Day番号: {ここに開始番号を入力}</code></pre>



<h3 class="wp-block-heading">使用例</h3>



<pre class="wp-block-code"><code>添付されたYouTubeマスターリストCSVから、「トックリツバメのヒナ 成長の瞬間【ショートハイライト】」のDay 56以降の動画を対象に、WordPress Gutenberg用のMarkdownコードを生成してください。

【処理手順】
1. CSVを読み込み、指定した再生リストの動画のみを抽出
2. タイトルからDay番号を抽出（正規表現: /Day\s*(\d+)/i）
3. タイトルから「」内のテキストを抽出（正規表現: /「(&#91;^」]+)」/）
4. 説明文の先頭行を抽出（改行で分割して最初の行）
5. Day番号でソート・グループ化
6. 指定した開始番号以降の動画のみを対象とする

【出力構造】
- H2: "観察記録 セカンド"
- H3: "Day XX"（Day番号のみ）
- H4: 「」内のタイトルテキスト
- コメント: 説明文の先頭行
- 画像リンク: `&#91;!&#91;タイトル サムネイル](サムネイルURL)](動画URL)`

【注意点】
- 同じDay番号に複数動画がある場合は、H3の下にH4を複数配置
- Day番号順に並べる
- Markdown形式で出力（Gutenbergで編集しやすくするため）
- 「」がないタイトルの場合はタイトル全体を使用

再生リスト名: トックリツバメのヒナ 成長の瞬間【ショートハイライト】
開始Day番号: 56</code></pre>
</blockquote>



<p>以下のようなmarkdownファイルが生成されるのでwordpressの適当なブロックに張り付けしたら完了です。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="722" height="823" src="https://take1bit.com/wp-content/uploads/2025/08/image-6.png" alt="" class="wp-image-2038" srcset="https://take1bit.com/wp-content/uploads/2025/08/image-6.png 722w, https://take1bit.com/wp-content/uploads/2025/08/image-6-263x300.png 263w" sizes="(max-width: 722px) 100vw, 722px" /></figure>



<p>この方法によって生成されたページが最初に紹介したページになります。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>YouTube APIを活用することで、200本を超える動画の管理を大幅に効率化できました。従来なら数時間かかっていた動画整理作業が、わずか35分程度で完了するようになります。 </p>



<p>この方法のメリット：</p>



<ul class="wp-block-list">
<li>全動画情報を一括取得してCSV化</li>



<li>再生リスト管理の見える化 </li>



<li>LLMと連携したMarkdown自動生成 </li>



<li> WordPressへの簡単な記事投稿</li>
</ul>



<p>特に、動画と再生リストの関連性を一覧で確認できるため、「迷子」の動画を簡単に発見できる点は大きな価値があります。また、LLMを活用することで、技術的な知識が少なくてもツールを作成・カスタマイズできるようになりました。 YouTubeチャンネルの運営効率化を検討している方は、ぜひ試してみてください。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ボートフィッシングでinsta360実践レビュー</title>
		<link>https://take1bit.com/computer-ja/board_insta360/</link>
		
		<dc:creator><![CDATA[管理者]]></dc:creator>
		<pubDate>Tue, 22 Jul 2025 04:09:33 +0000</pubDate>
				<category><![CDATA[AI・プログラミング]]></category>
		<guid isPermaLink="false">https://take1bit.com/?p=1989</guid>

					<description><![CDATA[はじめに 釣り好きのtake1bitです。ボートでのフィッシング動画を撮影したくて、insta360（360度カメラ）を使った撮影に挑戦してみました。いろいろと奮闘したので、その記録を紹介したいと思います。 カメラ選択に [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">はじめに</h2>



<p>釣り好きのtake1bitです。ボートでのフィッシング動画を撮影したくて、insta360（360度カメラ）を使った撮影に挑戦してみました。いろいろと奮闘したので、その記録を紹介したいと思います。</p>



<h2 class="wp-block-heading">カメラ選択について</h2>



<h3 class="wp-block-heading">従来のマイクピン式との比較</h3>



<p>よくある動画撮影でマイクピンのように装着する方法がスタンダードだと思いますが、タイラバ釣りでロッドの引きを表現するには課題があります。</p>



<p><strong>問題点：</strong></p>



<ul class="wp-block-list">
<li>横から撮影しないとロッドとカメラが一直線になってしまう</li>



<li>竿のしなりが映像で表現できない</li>



<li>カメラの装着作業が面倒</li>
</ul>



<p>そこで、ボートに固定して撮影する方法を検討しました。</p>



<h3 class="wp-block-heading">今回の選択：360度カメラ</h3>



<p>正直、マイクピン式にしておけばよかったのかもしれないと実は思っていますが、今回は以下の360度カメラを選択しました。以下は、One X5ですが今回使用したのはOne X2なので若干古いデバイスになります。</p>



<p><a rel="noopener" target="_blank" href="https://www.insta360.com/sal/x5?utm_term=INR7CJM">https://www.insta360.com/sal/x5?utm_term=INR7CJM<span class="fa fa-external-link external-icon anchor-icon"></span></a></p>



<p>参考までにInsta360からピンタイプのカメラも出ています。</p>



<p><a rel="noopener" target="_blank" href="https://www.insta360.com/sal/go-3?utm_term=INR7CJM">https://www.insta360.com/sal/go-3?utm_term=INR7CJM<span class="fa fa-external-link external-icon anchor-icon"></span></a></p>



<p>「他にはない動画を撮れるもの」として期待して購入したのですが&#8230;</p>



<h2 class="wp-block-heading">360度カメラの実際の使用感</h2>



<h3 class="wp-block-heading">メリット</h3>



<p><strong>1. 全方位を記録できる</strong></p>



<ul class="wp-block-list">
<li>すべての方向を撮影するので思わぬ良い映像が撮れる</li>



<li>「裏側では何かが起きてる？」といった意外なシーンも漏れなく記録される</li>
</ul>



<p><strong>2. 釣りに最適な特徴</strong></p>



<ul class="wp-block-list">
<li>ロッドの上下をしっかりと記録</li>



<li>ファイト中の釣り人、水面の動画など、シーンに応じた切り取りが可能</li>



<li>編集は大変だが、1台ですべてのアングルを撮影できるのは魅力的</li>
</ul>



<h3 class="wp-block-heading">デメリット</h3>



<p><strong>1. 壊れやすい構造</strong></p>



<ul class="wp-block-list">
<li>レンズが正面と裏面にあり、飛び出しているので傷つきやすい</li>
</ul>



<p><strong>2. 編集作業の大変さ</strong></p>



<ul class="wp-block-list">
<li>360度動画の編集が非常に複雑</li>



<li>やはり細かく作りこんでしまって、時間がかかってしまう&#8230;</li>



<li>360度なので、隠したい部分がある場合の処理が困難</li>
</ul>



<p><strong>3. ファイルサイズが巨大</strong></p>



<ul class="wp-block-list">
<li>One X2で5.8K撮影のため、30分の撮影で20GBのファイルサイズになる（一般的なフルHD動画の3倍）</li>
</ul>



<h3 class="wp-block-heading">総合的な感想</h3>



<p>一言でいうとメリットはあるのですが、編集がとても大変ということです。</p>



<p>スマホアプリが充実しているので、スマホのオート機能を使えば結構良い感じの動画になります。しかし、せっかくのこだわり動画なので、やはり細かく作りこんでしまう&#8230;という感じです。</p>



<h2 class="wp-block-heading">ボート設置システムの構築</h2>



<h3 class="wp-block-heading">固定方法の検討</h3>



<p>色々と考えましたが、ボートにカメラを固定するのが最大の悩みどころでした。</p>



<p>幸い、REGERのドック（船舶用ロッドホルダー）が船に付いていたので、これにアームを使って設置することを考えました。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="553" height="604" src="https://take1bit.com/wp-content/uploads/2025/07/image-3.jpg" alt="" class="wp-image-1991" srcset="https://take1bit.com/wp-content/uploads/2025/07/image-3.jpg 553w, https://take1bit.com/wp-content/uploads/2025/07/image-3-275x300.jpg 275w" sizes="(max-width: 553px) 100vw, 553px" /></figure>



<!-- START MoshimoAffiliateEasyLink -->
<script type="text/javascript">
(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;
b[a]=b[a]||function(){arguments.currentScript=c.currentScript
||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};
c.getElementById(a)||(d=c.createElement(f),d.src=g,
d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})
(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20220329","msmaflink");
msmaflink({"n":"【REGAR MARINE\/リガーマリン】フェンダークリート 199","b":"リガーマリン","t":"199","d":"https:\/\/m.media-amazon.com","c_p":"\/images\/I","p":["\/41iUf57uWzL._SL500_.jpg","\/51YxfZRh9YL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/B00J59JVCU","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/B00J59JVCU","a_id":4357890,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":4,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/%E3%80%90REGAR%20MARINE%2F%E3%83%AA%E3%82%AC%E3%83%BC%E3%83%9E%E3%83%AA%E3%83%B3%E3%80%91%E3%83%95%E3%82%A7%E3%83%B3%E3%83%80%E3%83%BC%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%88%20199\/","a_id":4352106,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":5,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=%E3%80%90REGAR%20MARINE%2F%E3%83%AA%E3%82%AC%E3%83%BC%E3%83%9E%E3%83%AA%E3%83%B3%E3%80%91%E3%83%95%E3%82%A7%E3%83%B3%E3%83%80%E3%83%BC%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%88%20199","a_id":4352107,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"jmIpW","s":"s"});
</script>
<div id="msmaflink-jmIpW">リンク</div>
<!-- MoshimoAffiliateEasyLink END -->



<h3 class="wp-block-heading">カメラアーム選択について</h3>



<p>Amazonなども検討しましたが、同じような商品でもtemuの方が安い場合が多いので、temuで購入しました。こちらも参考にしていただければと思います。ドックの径と自撮り棒の径がピッタリ合わない場合はガムテープなどでをぐるぐるに巻きにして使ってます。</p>



<p><a rel="noopener" target="_blank" href="https://temu.to/k/gkafqwv05h8">https://temu.to/k/gkafqwv05h8<span class="fa fa-external-link external-icon anchor-icon"></span></a></p>



<p><strong>1つ目：バイク用自撮り撮影タイプ</strong></p>



<p>非常に頑丈な作りで安心感があったのですが、2軸だったので高さが固定されてしまうとちょっとした航行中に海水をかぶってしまうので、3軸の方を使って高さを出しました。以下が二つ目。</p>



<!-- START MoshimoAffiliateEasyLink -->
<script type="text/javascript">
(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;
b[a]=b[a]||function(){arguments.currentScript=c.currentScript
||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};
c.getElementById(a)||(d=c.createElement(f),d.src=g,
d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})
(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20220329","msmaflink");
msmaflink({"n":"Insta360 自撮り棒に対応 110cm自撮り棒 調節可能長さ 1\/4インチネジ スポーツカメラマウントアダプター付き オートバイスタンド\/自転車スタンド Insta360 X5に対応 GoPro Hero 12\/11\/10\/9\/8 Insta360 ONE X4\/X3\/ ONE\/EVO用","b":"Yuzuruki","t":"","d":"https:\/\/m.media-amazon.com","c_p":"\/images\/I","p":["\/312t8d-lVYL._SL500_.jpg","\/51hQOZTvHZL._SL500_.jpg","\/41Rrz33+yrL._SL500_.jpg","\/31hLTmXpayL._SL500_.jpg","\/31w8CpyUteL._SL500_.jpg","\/31j1qVKKk6L._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/B0CSBT4S57","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/B0CSBT4S57","a_id":4357890,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":4,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/Insta360%20%E8%87%AA%E6%92%AE%E3%82%8A%E6%A3%92%E3%81%AB%E5%AF%BE%E5%BF%9C%20110cm%E8%87%AA%E6%92%AE%E3%82%8A%E6%A3%92%20%E8%AA%BF%E7%AF%80%E5%8F%AF%E8%83%BD%E9%95%B7%E3%81%95%201%2F4%E3%82%A4%E3%83%B3%E3%83%81%E3%83%8D%E3%82%B8%20%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%84%E3%82%AB%E3%83%A1%E3%83%A9%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF%E3%83%BC%E4%BB%98%E3%81%8D%20%E3%82%AA%E3%83%BC%E3%83%88%E3%83%90%E3%82%A4%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%89%2F%E8%87%AA%E8%BB%A2%E8%BB%8A%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%89%20Insta360%20X5%E3%81%AB%E5%AF%BE%E5%BF%9C%20GoPro%20Hero%2012%2F11%2F10%2F9%2F8%20Insta360%20ONE%20X4%2FX3%2F%20ONE%2FEVO%E7%94%A8\/","a_id":4352106,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":5,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=Insta360%20%E8%87%AA%E6%92%AE%E3%82%8A%E6%A3%92%E3%81%AB%E5%AF%BE%E5%BF%9C%20110cm%E8%87%AA%E6%92%AE%E3%82%8A%E6%A3%92%20%E8%AA%BF%E7%AF%80%E5%8F%AF%E8%83%BD%E9%95%B7%E3%81%95%201%2F4%E3%82%A4%E3%83%B3%E3%83%81%E3%83%8D%E3%82%B8%20%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%84%E3%82%AB%E3%83%A1%E3%83%A9%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF%E3%83%BC%E4%BB%98%E3%81%8D%20%E3%82%AA%E3%83%BC%E3%83%88%E3%83%90%E3%82%A4%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%89%2F%E8%87%AA%E8%BB%A2%E8%BB%8A%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%89%20Insta360%20X5%E3%81%AB%E5%AF%BE%E5%BF%9C%20GoPro%20Hero%2012%2F11%2F10%2F9%2F8%20Insta360%20ONE%20X4%2FX3%2F%20ONE%2FEVO%E7%94%A8","a_id":4352107,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"hRAuz","s":"s"});
</script>
<div id="msmaflink-hRAuz">リンク</div>
<!-- MoshimoAffiliateEasyLink END -->



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="492" src="https://take1bit.com/wp-content/uploads/2025/07/image-4.jpg" alt="" class="wp-image-1993" srcset="https://take1bit.com/wp-content/uploads/2025/07/image-4.jpg 1024w, https://take1bit.com/wp-content/uploads/2025/07/image-4-300x144.jpg 300w, https://take1bit.com/wp-content/uploads/2025/07/image-4-768x369.jpg 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>2つ目：3軸対応モデル</strong></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="321" src="https://take1bit.com/wp-content/uploads/2025/07/image-3.png" alt="" class="wp-image-1992" srcset="https://take1bit.com/wp-content/uploads/2025/07/image-3.png 1024w, https://take1bit.com/wp-content/uploads/2025/07/image-3-300x94.png 300w, https://take1bit.com/wp-content/uploads/2025/07/image-3-768x241.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>3軸対応で角度調整の自由度が高い</li>



<li>かなり華奢な作りで「ポキっと折れそう」で不安な点はいつもあります。</li>



<li>現在のところ問題なく使用できている</li>
</ul>



<p>装着すると以下のような感じです。<br></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="960" height="689" src="https://take1bit.com/wp-content/uploads/2025/07/image-4-1.jpg" alt="" class="wp-image-1994" srcset="https://take1bit.com/wp-content/uploads/2025/07/image-4-1.jpg 960w, https://take1bit.com/wp-content/uploads/2025/07/image-4-1-300x215.jpg 300w, https://take1bit.com/wp-content/uploads/2025/07/image-4-1-768x551.jpg 768w" sizes="(max-width: 960px) 100vw, 960px" /></figure>



<h2 class="wp-block-heading">完成動画について</h2>



<p>最終的にこのような動画を作成することができます。 まだまだ未熟な仕上がりですが&#8230;</p>


<figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><a href="https://take1bit.com/computer-ja/board_insta360/"><img decoding="async" src="//i.ytimg.com/vi/VWRh7FzdM1s/hqdefault.jpg" alt="YouTube Video"></a><br /><br /><figcaption></figcaption></figure>


<h2 class="wp-block-heading">今後の展望</h2>



<p>これから夏に向けて川や海での撮影を予定しています。様々な使い方を試しながら、釣り動画撮影のノウハウを蓄積していく予定です。</p>



<p>360度カメラでの撮影は奮闘の連続でしたが、新たな釣りの楽しみ方として発展させていければと思います。</p>



<p>アフィリエイトコードを添付しておきます。このコードを使えば少し安くなると思います。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>INR7CJM</p>
</blockquote>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【実体験レビュー】PLAUD NotePinを実際に使ってみた正直な感想｜ウェアラブルAI録音の常識が変わった</title>
		<link>https://take1bit.com/computer-ja/plaud_ai_revier/</link>
		
		<dc:creator><![CDATA[管理者]]></dc:creator>
		<pubDate>Sun, 20 Jul 2025 12:31:20 +0000</pubDate>
				<category><![CDATA[AI・プログラミング]]></category>
		<category><![CDATA[生成ＡＩ]]></category>
		<guid isPermaLink="false">https://take1bit.com/?p=1999</guid>

					<description><![CDATA[はじめに：なぜPLAUD NotePinを選んだのか 録音や議事録作成の効率化に興味があり、従来の録音アプリでは満足できない部分もあったところ、PLAUD NotePinという録音デバイスを知りました。 価格は2万円超え [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">はじめに：なぜPLAUD NotePinを選んだのか</h2>



<p>録音や議事録作成の効率化に興味があり、従来の録音アプリでは満足できない部分もあったところ、PLAUD NotePinという録音デバイスを知りました。</p>



<p>価格は2万円超えと決して安くはありませんが、「本当に使えるウェアラブル録音ガジェット」として話題になっていたので、サンプルをお借りして実際に試してみることに。実際に体験して得た率直な感想をお伝えします。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="633" height="521" src="https://take1bit.com/wp-content/uploads/2025/07/image-4-2.jpg" alt="" class="wp-image-2002" srcset="https://take1bit.com/wp-content/uploads/2025/07/image-4-2.jpg 633w, https://take1bit.com/wp-content/uploads/2025/07/image-4-2-300x247.jpg 300w" sizes="(max-width: 633px) 100vw, 633px" /></figure>



<h2 class="wp-block-heading">開封の瞬間から感じた「質の違い」</h2>



<h3 class="wp-block-heading">パッケージからして違う</h3>



<p>箱を開けた瞬間、「これは普通の録音機器じゃない」と感じました。高級感があってエレガントなパッケージで、細部まで配慮されたデザインが印象的です。正直、これほどの質感とデザイン性を追求した製品は素晴らしいと思います。</p>



<h3 class="wp-block-heading">2つのタイプから選べる自由度</h3>



<p>PLAUD AIには以下の2つのタイプがあります：</p>



<p><strong>PLAUD NOTE（カード型）</strong>：薄型で軽量、スマートフォンに貼り付けて使用。通話録音にも対応しています。ボタンがあるのでわかりやすく、従来のボイスレコーダーに近い外観です。こちらは使ったことがないのですが、馴染みやすそうな印象を受けました。</p>



<!-- START MoshimoAffiliateEasyLink -->
<script type="text/javascript">
(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;
b[a]=b[a]||function(){arguments.currentScript=c.currentScript
||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};
c.getElementById(a)||(d=c.createElement(f),d.src=g,
d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})
(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20220329","msmaflink");
msmaflink({"n":"PLAUD NOTE AI ボイスレコーダー ワンタッチ録音 文字起こし 先端LLMによる要約 ICレコーダー 携帯\/PCアプリ連動 通常録音\/通話録音モード 極薄 64GB大容量 発言者識別 音声インポート AI人声強化 議事録自動作成 マインドマップ 30時間連続使用 Bluetooth接続 iphone\u0026Android対応 専用ケース付属 会議\/授業\/インタービューなどに適用 ブラック","b":"PLAUD","t":"","d":"https:\/\/m.media-amazon.com","c_p":"\/images\/I","p":["\/31L8bU9TiRL._SL500_.jpg","\/51krtwBE5OL._SL500_.jpg","\/51lj1ClodqL._SL500_.jpg","\/41D+g3hSfLL._SL500_.jpg","\/41w6ayXb6WL._SL500_.jpg","\/418JfY6kxZL._SL500_.jpg","\/51-lfh93I3L._SL500_.jpg","\/51xne+UN2JL._SL500_.jpg","\/41K1lQvcMoL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/B0D1XZWHD6","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/B0D1XZWHD6","a_id":4357890,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":4,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/PLAUD%20NOTE%20AI%20%E3%83%9C%E3%82%A4%E3%82%B9%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%80%E3%83%BC%20%E3%83%AF%E3%83%B3%E3%82%BF%E3%83%83%E3%83%81%E9%8C%B2%E9%9F%B3%20%E6%96%87%E5%AD%97%E8%B5%B7%E3%81%93%E3%81%97%20%E5%85%88%E7%AB%AFLLM%E3%81%AB%E3%82%88%E3%82%8B%E8%A6%81%E7%B4%84%20IC%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%80%E3%83%BC%20%E6%90%BA%E5%B8%AF%2FPC%E3%82%A2%E3%83%97%E3%83%AA%E9%80%A3%E5%8B%95%20%E9%80%9A%E5%B8%B8%E9%8C%B2%E9%9F%B3%2F%E9%80%9A%E8%A9%B1%E9%8C%B2%E9%9F%B3%E3%83%A2%E3%83%BC%E3%83%89%20%E6%A5%B5%E8%96%84%2064GB%E5%A4%A7%E5%AE%B9%E9%87%8F%20%E7%99%BA%E8%A8%80%E8%80%85%E8%AD%98%E5%88%A5%20%E9%9F%B3%E5%A3%B0%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%20AI%E4%BA%BA%E5%A3%B0%E5%BC%B7%E5%8C%96%20%E8%AD%B0%E4%BA%8B%E9%8C%B2%E8%87%AA%E5%8B%95%E4%BD%9C%E6%88%90%20%E3%83%9E%E3%82%A4%E3%83%B3%E3%83%89%E3%83%9E%E3%83%83%E3%83%97%2030%E6%99%82%E9%96%93%E9%80%A3%E7%B6%9A%E4%BD%BF%E7%94%A8%20Bluetooth%E6%8E%A5%E7%B6%9A%20iphone%26Android%E5%AF%BE%E5%BF%9C%20%E5%B0%82%E7%94%A8%E3%82%B1%E3%83%BC%E3%82%B9%E4%BB%98%E5%B1%9E%20%E4%BC%9A%E8%AD%B0%2F%E6%8E%88%E6%A5%AD%2F%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%93%E3%83%A5%E3%83%BC%E3%81%AA%E3%81%A9%E3%81%AB%E9%81%A9%E7%94%A8%20%E3%83%96%E3%83%A9%E3%83%83%E3%82%AF\/","a_id":4352106,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":5,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=PLAUD%20NOTE%20AI%20%E3%83%9C%E3%82%A4%E3%82%B9%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%80%E3%83%BC%20%E3%83%AF%E3%83%B3%E3%82%BF%E3%83%83%E3%83%81%E9%8C%B2%E9%9F%B3%20%E6%96%87%E5%AD%97%E8%B5%B7%E3%81%93%E3%81%97%20%E5%85%88%E7%AB%AFLLM%E3%81%AB%E3%82%88%E3%82%8B%E8%A6%81%E7%B4%84%20IC%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%80%E3%83%BC%20%E6%90%BA%E5%B8%AF%2FPC%E3%82%A2%E3%83%97%E3%83%AA%E9%80%A3%E5%8B%95%20%E9%80%9A%E5%B8%B8%E9%8C%B2%E9%9F%B3%2F%E9%80%9A%E8%A9%B1%E9%8C%B2%E9%9F%B3%E3%83%A2%E3%83%BC%E3%83%89%20%E6%A5%B5%E8%96%84%2064GB%E5%A4%A7%E5%AE%B9%E9%87%8F%20%E7%99%BA%E8%A8%80%E8%80%85%E8%AD%98%E5%88%A5%20%E9%9F%B3%E5%A3%B0%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%20AI%E4%BA%BA%E5%A3%B0%E5%BC%B7%E5%8C%96%20%E8%AD%B0%E4%BA%8B%E9%8C%B2%E8%87%AA%E5%8B%95%E4%BD%9C%E6%88%90%20%E3%83%9E%E3%82%A4%E3%83%B3%E3%83%89%E3%83%9E%E3%83%83%E3%83%97%2030%E6%99%82%E9%96%93%E9%80%A3%E7%B6%9A%E4%BD%BF%E7%94%A8%20Bluetooth%E6%8E%A5%E7%B6%9A%20iphone%26Android%E5%AF%BE%E5%BF%9C%20%E5%B0%82%E7%94%A8%E3%82%B1%E3%83%BC%E3%82%B9%E4%BB%98%E5%B1%9E%20%E4%BC%9A%E8%AD%B0%2F%E6%8E%88%E6%A5%AD%2F%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%93%E3%83%A5%E3%83%BC%E3%81%AA%E3%81%A9%E3%81%AB%E9%81%A9%E7%94%A8%20%E3%83%96%E3%83%A9%E3%83%83%E3%82%AF","a_id":4352107,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"BXo51","s":"s"});
</script>
<div id="msmaflink-BXo51">リンク</div>
<!-- MoshimoAffiliateEasyLink END -->



<p><strong>PLAUD NotePin（ウェアラブル型）</strong>：小型カプセル型で、以下の3つの装着方法から選択できます：</p>



<!-- START MoshimoAffiliateEasyLink -->
<script type="text/javascript">
(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;
b[a]=b[a]||function(){arguments.currentScript=c.currentScript
||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};
c.getElementById(a)||(d=c.createElement(f),d.src=g,
d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})
(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20220329","msmaflink");
msmaflink({"n":"PLAUD NotePin AI ボイスレコーダー【通常版】AI文字起こし\/要約 ウェアラブルAIツール カプセル型 先端LLM活用 ワンタッチ録音 アプリ連動 112言語対応 発言者識別 編集可能 20時間連続使用 音声インポート Bluetooth接続 スマホ\/パソコン対応 専用マグネットピン\/クリップ付属 軽量 64GB大容量 録音機 小型 議事録\/講義ノート\/ボイスメモ\/会話記録 グレー","b":"PLAUD","t":"","d":"https:\/\/m.media-amazon.com","c_p":"\/images\/I","p":["\/21v-lc8I4fL._SL500_.jpg","\/412o7jZARGL._SL500_.jpg","\/413L6f4uPLL._SL500_.jpg","\/51b3lB4bnZL._SL500_.jpg","\/41u76UNt6XL._SL500_.jpg","\/41ccB0d4nQL._SL500_.jpg","\/41Hi+WCbvgL._SL500_.jpg","\/41A9ysMdFZL._SL500_.jpg","\/41Pac0WsR9L._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/B0DZWYVWBR","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/B0DZWYVWBR","a_id":4357890,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":4,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/PLAUD%20NotePin%20AI%20%E3%83%9C%E3%82%A4%E3%82%B9%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%80%E3%83%BC%E3%80%90%E9%80%9A%E5%B8%B8%E7%89%88%E3%80%91AI%E6%96%87%E5%AD%97%E8%B5%B7%E3%81%93%E3%81%97%2F%E8%A6%81%E7%B4%84%20%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%A9%E3%83%96%E3%83%ABAI%E3%83%84%E3%83%BC%E3%83%AB%20%E3%82%AB%E3%83%97%E3%82%BB%E3%83%AB%E5%9E%8B%20%E5%85%88%E7%AB%AFLLM%E6%B4%BB%E7%94%A8%20%E3%83%AF%E3%83%B3%E3%82%BF%E3%83%83%E3%83%81%E9%8C%B2%E9%9F%B3%20%E3%82%A2%E3%83%97%E3%83%AA%E9%80%A3%E5%8B%95%20112%E8%A8%80%E8%AA%9E%E5%AF%BE%E5%BF%9C%20%E7%99%BA%E8%A8%80%E8%80%85%E8%AD%98%E5%88%A5%20%E7%B7%A8%E9%9B%86%E5%8F%AF%E8%83%BD%2020%E6%99%82%E9%96%93%E9%80%A3%E7%B6%9A%E4%BD%BF%E7%94%A8%20%E9%9F%B3%E5%A3%B0%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%20Bluetooth%E6%8E%A5%E7%B6%9A%20%E3%82%B9%E3%83%9E%E3%83%9B%2F%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3%E5%AF%BE%E5%BF%9C%20%E5%B0%82%E7%94%A8%E3%83%9E%E3%82%B0%E3%83%8D%E3%83%83%E3%83%88%E3%83%94%E3%83%B3%2F%E3%82%AF%E3%83%AA%E3%83%83%E3%83%97%E4%BB%98%E5%B1%9E%20%E8%BB%BD%E9%87%8F%2064GB%E5%A4%A7%E5%AE%B9%E9%87%8F%20%E9%8C%B2%E9%9F%B3%E6%A9%9F%20%E5%B0%8F%E5%9E%8B%20%E8%AD%B0%E4%BA%8B%E9%8C%B2%2F%E8%AC%9B%E7%BE%A9%E3%83%8E%E3%83%BC%E3%83%88%2F%E3%83%9C%E3%82%A4%E3%82%B9%E3%83%A1%E3%83%A2%2F%E4%BC%9A%E8%A9%B1%E8%A8%98%E9%8C%B2%20%E3%82%B0%E3%83%AC%E3%83%BC\/","a_id":4352106,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":5,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=PLAUD%20NotePin%20AI%20%E3%83%9C%E3%82%A4%E3%82%B9%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%80%E3%83%BC%E3%80%90%E9%80%9A%E5%B8%B8%E7%89%88%E3%80%91AI%E6%96%87%E5%AD%97%E8%B5%B7%E3%81%93%E3%81%97%2F%E8%A6%81%E7%B4%84%20%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%A9%E3%83%96%E3%83%ABAI%E3%83%84%E3%83%BC%E3%83%AB%20%E3%82%AB%E3%83%97%E3%82%BB%E3%83%AB%E5%9E%8B%20%E5%85%88%E7%AB%AFLLM%E6%B4%BB%E7%94%A8%20%E3%83%AF%E3%83%B3%E3%82%BF%E3%83%83%E3%83%81%E9%8C%B2%E9%9F%B3%20%E3%82%A2%E3%83%97%E3%83%AA%E9%80%A3%E5%8B%95%20112%E8%A8%80%E8%AA%9E%E5%AF%BE%E5%BF%9C%20%E7%99%BA%E8%A8%80%E8%80%85%E8%AD%98%E5%88%A5%20%E7%B7%A8%E9%9B%86%E5%8F%AF%E8%83%BD%2020%E6%99%82%E9%96%93%E9%80%A3%E7%B6%9A%E4%BD%BF%E7%94%A8%20%E9%9F%B3%E5%A3%B0%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%20Bluetooth%E6%8E%A5%E7%B6%9A%20%E3%82%B9%E3%83%9E%E3%83%9B%2F%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3%E5%AF%BE%E5%BF%9C%20%E5%B0%82%E7%94%A8%E3%83%9E%E3%82%B0%E3%83%8D%E3%83%83%E3%83%88%E3%83%94%E3%83%B3%2F%E3%82%AF%E3%83%AA%E3%83%83%E3%83%97%E4%BB%98%E5%B1%9E%20%E8%BB%BD%E9%87%8F%2064GB%E5%A4%A7%E5%AE%B9%E9%87%8F%20%E9%8C%B2%E9%9F%B3%E6%A9%9F%20%E5%B0%8F%E5%9E%8B%20%E8%AD%B0%E4%BA%8B%E9%8C%B2%2F%E8%AC%9B%E7%BE%A9%E3%83%8E%E3%83%BC%E3%83%88%2F%E3%83%9C%E3%82%A4%E3%82%B9%E3%83%A1%E3%83%A2%2F%E4%BC%9A%E8%A9%B1%E8%A8%98%E9%8C%B2%20%E3%82%B0%E3%83%AC%E3%83%BC","a_id":4352107,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"rRRVz","s":"s"});
</script>
<div id="msmaflink-rRRVz">リンク</div>
<!-- MoshimoAffiliateEasyLink END -->



<ul class="wp-block-list">
<li><strong>ネックストラップ</strong>：首から下げて自然に録音、目立たずに使用可能</li>



<li><strong>クリップ</strong>：胸ポケットやシャツに簡単装着、ビジネスシーンに最適</li>



<li><strong>リストバンド</strong>：手首に装着してアクティブに録音、動きながらの利用に便利</li>
</ul>



<p>私が今回試したのはウェアラブル型のNotePinです。用途に応じて装着方法を変えられる点が非常に便利でした。</p>



<h2 class="wp-block-heading">実際の使用感：シンプルだからこそ使いやすい</h2>



<h3 class="wp-block-heading">操作は驚くほど簡単</h3>



<p>デバイスのAマークのすぐ下にある感圧式センサーを強めに押すだけで録音開始。機能を絞り込んでいるからこそ、迷うことなく操作できます。感圧式のため、最初は少し強めに押す必要があることに慣れが必要でした。</p>



<h3 class="wp-block-heading">装着方法による使い分けが便利</h3>



<p>磁石式の装着システムにより、その日の服装や状況に合わせて最適なスタイルを選択できます。</p>



<h2 class="wp-block-heading">真価を発揮するのは「録音後」</h2>



<h3 class="wp-block-heading">AI要約機能が想像以上に優秀</h3>



<p>録音データは自動的にクラウドで処理され、シーンに応じた最適な要約を生成してくれます。会議、商談、プレゼンテーションなど、AIが内容を判断して適切な形式で要約してくれるため、手間がかかりません。</p>



<p>「そう、それが言いたかった！」と思わず唸ってしまうほど、要点を的確に捉えた要約が生成されます。</p>



<h3 class="wp-block-heading">話者識別機能で議事録作成が劇的に楽に</h3>



<p>初回に話者識別を設定すれば、以降は自動的に誰が話しているかを認識してくれます。複数人での会議でも、誰が何を言ったかが明確に記録されるのは非常に便利です。</p>



<h3 class="wp-block-heading">カスタムテンプレートで自分好みに</h3>



<p>デフォルトの要約形式も優秀ですが、カスタムテンプレートを使えば自分の業務に最適化された要約を作成できます。初心者でも簡単に設定できる点も好印象です。</p>



<h2 class="wp-block-heading">実際のビジネスシーンでの活用例</h2>



<h3 class="wp-block-heading">1. 重要な商談での「保険」として</h3>



<p>マンション購入時の説明や重要な契約の打ち合わせなど、「後で誤解が生じたら大変」という場面で重宝しています。ウェアラブルなので、相手に気を遣わせることもありません。</p>



<h3 class="wp-block-heading">2. Ask AI機能で理解を深める</h3>



<p>録音後に「Ask AI」機能を使えば、「この部分についてもっと詳しく教えて」「ここが理解できなかった」といった質問ができます。まるで会議の参加者に直接質問しているような感覚で情報を整理できます。</p>



<h3 class="wp-block-heading">3. 高齢のご家族への活用も</h3>



<p>離れて暮らす高齢のご両親に使ってもらうのも良いかもしれません。不審な電話があった際の記録として、後で家族が内容を確認できる安心感があります。</p>



<h2 class="wp-block-heading">PLAUD NotePinの革命的な3つのポイント</h2>



<p>実際に使ってみて、これまでの録音機器とは根本的に違うと感じたポイントが3つあります。</p>



<p><strong>1. オシャレで軽量、いつでも録音できる自由度</strong><br>昔からレコーダーなどはありましたが、ここまでスタイリッシュで身に着けていても違和感のないデバイスは画期的です。</p>



<p><strong>2. 質感の重要性を再認識</strong><br>2万円超えの価格に見合う高品質な質感は、使う度に満足感を与えてくれます。デザインと機能性の両立が素晴らしい。</p>



<p><strong>3. LLMの真価で要約＆質問、話者特定</strong><br>単なる録音機能を突き詰めるだけでなく、最新AI技術との融合により、まったく新しい感覚、新しい商品カテゴリを生み出していると感じます。</p>



<p></p>



<h2 class="wp-block-heading">料金プランについて（公式サイトで最新情報を確認してください）</h2>



<p>基本的な料金構成は以下の通りです：</p>



<p><strong>スタータープラン（無料）</strong>：本体購入で月300分までのGPT-4o文字起こし・要約機能が永年無料</p>



<p><strong>プロプラン</strong>：年間16,800円で月1,200分の文字起こしが可能</p>



<p><strong>無制限プラン</strong>：年間40,000円で1日最大100時間の文字起こしが可能</p>



<p></p>



<h2 class="wp-block-heading">【動画作成】質感とユースケースの紹介</h2>



<figure class="wp-block-video"><video height="720" style="aspect-ratio: 1280 / 720;" width="1280" controls src="https://take1bit.com/wp-content/uploads/2025/07/plaude_shitukan.mp4"></video></figure>



<p>質感と実際の使用感をわかりやすく動画にまとめました。面白い試みとして、オレオレ詐欺の実録音声を録音して、AIに分析してもらうということも思いつきでやってみました。</p>



<p>結果として、AIがオレオレ詐欺の典型的な手口を見破り、注意すべきポイントを整理してくれて驚きました。高齢のご両親などが不審な電話を受けた際、「とりあえず録音しておいて、後でAIに聞いてみる」という使い方で、客観的に判断できるツールとしても活用できそうです。</p>



<h2 class="wp-block-heading">まとめ：録音機器の概念を変える革命的な体験</h2>



<p>実際に使ってみた結論として、PLAUD NotePinは「録音機器の概念を変える製品」だと確信しています。従来のレコーダー機能を突き詰めただけでなく、技術の進歩とデザインの力で既存の製品カテゴリが完全に生まれ変わった瞬間を目撃できたような、非常に感慨深い体験でした。</p>



<p>音声とLLMの組み合わせは、ITリテラシーが低い高齢者などとの相性が良く、会話という身近なネタがあるため、LLMが使いづらい方でもとっつきやすいのではないかと思います。新しい働き方のスタイルだけでなく、高齢者に渡して使ってもらうなど、新しい使い方を見つけてみてはどうでしょうか。</p>


]]></content:encoded>
					
		
		<enclosure url="https://take1bit.com/wp-content/uploads/2025/07/plaude_shitukan.mp4" length="0" type="video/mp4" />

			</item>
		<item>
		<title>OpenAI GPT Image 1の画像編集機能を使ってみた</title>
		<link>https://take1bit.com/computer-ja/openai-gpt-image-gpt1/</link>
		
		<dc:creator><![CDATA[管理者]]></dc:creator>
		<pubDate>Sun, 20 Jul 2025 09:12:39 +0000</pubDate>
				<category><![CDATA[AI・プログラミング]]></category>
		<guid isPermaLink="false">https://take1bit.com/?p=1979</guid>

					<description><![CDATA[2025年4月にリリースされたOpenAIの最新画像生成モデル「GPT Image 1」。今回は、その強力な画像編集機能を実際に試してみました。特に注目すべきは、既存の画像に新しい要素を自然に追加したり、複数の画像を合成 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>2025年4月にリリースされたOpenAIの最新画像生成モデル「GPT Image 1」。今回は、その強力な画像編集機能を実際に試してみました。特に注目すべきは、既存の画像に新しい要素を自然に追加したり、複数の画像を合成したりできる機能です。</p>



<h2 class="wp-block-heading">参考記事</h2>



<p>この記事は以下のnote記事を参考にしています：</p>



<ul class="wp-block-list">
<li><a rel="noopener" target="_blank" href="https://note.com/npaka/n/ne83ca0fd20d3">OpenAI API による 高い入力忠実度での画像生成を試す<span class="fa fa-external-link external-icon anchor-icon"></span></a></li>
</ul>



<h2 class="wp-block-heading">実際に試してみた2つの機能</h2>



<h3 class="wp-block-heading">1. 単一画像編集：海にゴジラを追加</h3>



<p>まずは基本的な画像編集機能から。美しい夕焼けの海の画像に、巨大なゴジラを追加してみました。</p>



<p><strong>Before</strong>: 平和な夕焼けの海<br><strong>After</strong>: ゴジラが海から出現する劇的なシーン</p>



<p>合成結果は自然で、ゴジラが元の風景に馴染んでおり、違和感の少ない仕上がりとなりました。AIは自然な水しぶきや、巨大感を演出するスケール感も自動で追加してくれます。</p>



<h3 class="wp-block-heading">2. 複数画像合成：アニメキャラクターと実写人物の融合</h3>



<p>次に、GPT Image 1の特徴的な機能である複数画像の合成を試しました。アニメ「Paw Patrol」のキャラクターたちと、実写の女の子の写真を合成して、一つの自然なシーンを作成しました。</p>



<p><strong>結果</strong>: 実写の女の子がアニメ風に変換され、Paw Patrolのキャラクターと手をつないで一緒に写っているシーン</p>



<p>アニメ調での合成は比較的自然に溶け込みますが、リアル調ではアニメと実写の組み合わせのため違和感が発生しやすい傾向があります。プロンプトの工夫により、マントなどの細部も再現しつつ、絵に溶け込んだ画像が生成可能です。</p>



<h2 class="wp-block-heading">技術的な特徴</h2>



<h3 class="wp-block-heading">Input Fidelity（入力忠実度）</h3>



<p><code>input_fidelity="high"</code>を設定することで、元画像の重要な特徴（顔、ロゴ、細かいディテール）を高い精度で保持できます。これにより、元の画像の品質を高く保ちつつ、ある部分だけを修正することが実現できます。</p>



<h3 class="wp-block-heading">複数画像対応</h3>



<p>従来のDALL-E 3とは異なり、GPT Image 1は複数の画像を同時に入力として受け取ることができます（最大10枚）。これにより、異なる画像の要素を組み合わせた新しいシーンの創造が可能になります。</p>



<h2 class="wp-block-heading">試してみた</h2>



<h3 class="wp-block-heading">単一画像編集</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Add a massive Godzilla emerging from the sea in the center of this image. The monster should be towering above the water with dramatic splashes. Keep the beautiful sunset sky and boat</p>



<pre id="tw-target-text" class="wp-block-preformatted">この画像の中央に、巨大なゴジラが海から出現し、ドラマチックなしぶきを上げて水面からそびえ立っています。美しい夕焼け空とボートはそのままにしてください。</pre>
</blockquote>



<ul class="wp-block-list">
<li>元画像</li>
</ul>



<p>これならゴジラが出てくる雰囲気だったでゴジラを出現させてみました。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="768" src="https://take1bit.com/wp-content/uploads/2025/07/sunset_sea.jpg" alt="" class="wp-image-1985" srcset="https://take1bit.com/wp-content/uploads/2025/07/sunset_sea.jpg 1024w, https://take1bit.com/wp-content/uploads/2025/07/sunset_sea-300x225.jpg 300w, https://take1bit.com/wp-content/uploads/2025/07/sunset_sea-768x576.jpg 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">結果の合成画像</h3>



<p>違和感ありませんね。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="683" src="https://take1bit.com/wp-content/uploads/2025/07/godzilla_emerges.jpg" alt="" class="wp-image-1986" srcset="https://take1bit.com/wp-content/uploads/2025/07/godzilla_emerges.jpg 1024w, https://take1bit.com/wp-content/uploads/2025/07/godzilla_emerges-300x200.jpg 300w, https://take1bit.com/wp-content/uploads/2025/07/godzilla_emerges-768x512.jpg 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<pre class="wp-block-code"><code></code></pre>



<h3 class="wp-block-heading">複数画像合成</h3>



<p>最近子供がパウパトロールにはまっているので、それを題材にしてみました。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Insert the real girl from the second image into the Paw Patrol group from the first image. She should hold hands with the main character. Convert her to 3D animated style while keeping all original characters</p>



<p><strong>1枚目の画像のパウ・パトロールのグループに、2枚目の画像の実写の女の子を挿入してください。彼女はメインキャラクターと手をつなぐようにします。元のキャラクターは全員そのままに、女の子の姿を3Dアニメスタイルに変換してください。</strong></p>
</blockquote>



<ul class="wp-block-list">
<li>元画像</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="414" src="https://take1bit.com/wp-content/uploads/2025/07/image-2-2.jpg" alt="" class="wp-image-1984" srcset="https://take1bit.com/wp-content/uploads/2025/07/image-2-2.jpg 1024w, https://take1bit.com/wp-content/uploads/2025/07/image-2-2-300x121.jpg 300w, https://take1bit.com/wp-content/uploads/2025/07/image-2-2-768x311.jpg 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>（C）2023 Paramount Pictures. All rights reserved.</p>



<ul class="wp-block-list">
<li>合成する画像</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="397" height="512" src="https://take1bit.com/wp-content/uploads/2025/07/image-1.png" alt="" class="wp-image-1981" srcset="https://take1bit.com/wp-content/uploads/2025/07/image-1.png 397w, https://take1bit.com/wp-content/uploads/2025/07/image-1-233x300.png 233w" sizes="(max-width: 397px) 100vw, 397px" /></figure>



<h3 class="wp-block-heading">結果の合成画像</h3>



<p>多少デフォルメされていますが、服装もかなり再現性のある感じアニメで自然な画像を合成されていて、手をつないでる部分も違和感ありませんね。多少、デフォルメされている部分はありますが、高解像度の処理も加わってますのでなかなかのすばらしい出来栄え。参考ですが、今回のように縦長と横長の画像する場合は、あらかじめサイズを指定したほうがよさそうです。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="607" src="https://take1bit.com/wp-content/uploads/2025/07/image-2-1.jpg" alt="" class="wp-image-1983" srcset="https://take1bit.com/wp-content/uploads/2025/07/image-2-1.jpg 1024w, https://take1bit.com/wp-content/uploads/2025/07/image-2-1-300x178.jpg 300w, https://take1bit.com/wp-content/uploads/2025/07/image-2-1-768x455.jpg 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<pre class="wp-block-code"><code></code></pre>



<h2 class="wp-block-heading">実装コード</h2>



<p>実装例を以下に書いておきます。<br>api.txtにapiキーを保存しておく必要があります。</p>



<p></p>



<pre class="wp-block-code"><code>import base64<br>import os<br>from io import BytesIO<br>from PIL import Image<br>from openai import OpenAI<br><br>def load_api_key():<br>    """api.txtファイルからAPIキーを読み込む"""<br>    try:<br>        with open('api.txt', 'r', encoding='utf-8') as file:<br>            api_key = file.read().strip()<br>        return api_key<br>    except FileNotFoundError:<br>        print("api.txtファイルが見つかりません。")<br>        return None<br><br>def edit_images(image_paths, prompt, output_filename=None, size=None):<br>    """<br>    画像を編集・合成する統合関数<br>    <br>    Args:<br>        image_paths: 画像パスのリスト（単一の場合は&#91;path]、複数の場合は&#91;path1, path2, ...]）<br>        prompt: 編集指示のプロンプト<br>        output_filename: 出力ファイル名（省略時は自動生成）<br>        size: 出力サイズ（省略時はデフォルト）<br>    """<br>    # APIクライアントの初期化<br>    api_key = load_api_key()<br>    if not api_key:<br>        return None<br>    <br>    client = OpenAI(api_key=api_key)<br>    <br>    try:<br>        # 画像ファイルを開く<br>        if isinstance(image_paths, str):<br>            image_paths = &#91;image_paths]  # 単一パスを配列に変換<br>        <br>        image_files = &#91;]<br>        for path in image_paths:<br>            if not os.path.exists(path):<br>                print(f"画像ファイル '{path}' が見つかりません。")<br>                return None<br>            image_files.append(open(path, "rb"))<br>        <br>        # APIパラメータの設定<br>        api_params = {<br>            "model": "gpt-image-1",<br>            "image": image_files&#91;0] if len(image_files) == 1 else image_files,<br>            "prompt": prompt,<br>            "input_fidelity": "high",<br>            "quality": "high",<br>            "output_format": "jpeg"<br>        }<br>        <br>        # 複数画像の場合はサイズを指定<br>        if len(image_files) > 1 and size:<br>            api_params&#91;"size"] = size<br>        <br>        # GPT Image 1で画像を編集<br>        result = client.images.edit(**api_params)<br>        <br>        # 結果の画像を保存<br>        image_base64 = result.data&#91;0].b64_json<br>        image_bytes = base64.b64decode(image_base64)<br>        edited_image = Image.open(BytesIO(image_bytes))<br>        <br>        # ファイル名の設定<br>        if output_filename is None:<br>            if len(image_files) == 1:<br>                output_filename = f"edited_{os.path.basename(image_paths&#91;0])}"<br>            else:<br>                output_filename = "composed_image.jpg"<br>        <br>        # 結果を保存<br>        output_folder = "art_output"<br>        os.makedirs(output_folder, exist_ok=True)<br>        output_path = os.path.join(output_folder, output_filename)<br>        <br>        edited_image.save(output_path, "JPEG", quality=95)<br>        print(f"編集完了: {output_path}")<br>        <br>        # ファイルを閉じる<br>        for file in image_files:<br>            file.close()<br>            <br>        return edited_image<br>        <br>    except Exception as e:<br>        print(f"編集エラー: {e}")<br>        # エラー時もファイルを閉じる<br>        for file in image_files:<br>            if not file.closed:<br>                file.close()<br>        return None<br><br># 使用例1: 単一画像編集（海にゴジラを追加）<br>def example_single_edit():<br>    """単一画像編集の使用例"""<br>    edit_images(<br>        image_paths="sunset_sea.jpg",<br>        prompt="Add a massive Godzilla emerging from the sea in the center of this image. The monster should be towering above the water with dramatic splashes. Keep the beautiful sunset sky and boat.",<br>        output_filename="godzilla_sea.jpg"<br>    )<br><br># 使用例2: 複数画像合成（アニメキャラ＋実写人物）<br>def example_multiple_composition():<br>    """複数画像合成の使用例"""<br>    edit_images(<br>        image_paths=&#91;"paw_patrol.jpg", "girl_photo.jpg"],<br>        prompt="Insert the real girl from the second image into the Paw Patrol group from the first image. She should hold hands with the main character. Convert her to 3D animated style while keeping all original characters.",<br>        output_filename="anime_girl_composition.jpg",<br>        size="1536x1024"  # 横長フォーマット<br>    )<br><br>if __name__ == "__main__":<br>    print("GPT Image 1 画像編集のデモ")<br>    print("1. 単一画像編集（ゴジラ追加）")<br>    print("2. 複数画像合成（アニメ合成）")<br>    <br>    choice = input("選択してください (1 or 2): ").strip()<br>    <br>    if choice == "1":<br>        example_single_edit()<br>    elif choice == "2":<br>        example_multiple_composition()<br>    else:<br>        print("無効な選択です")<br><br><br></code></pre>



<h2 class="wp-block-heading">コストと実用性について</h2>



<h3 class="wp-block-heading">料金面での課題</h3>



<p>面白かったのでいろいろと作っていたのですが、結構な価格でした。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="324" height="441" src="https://take1bit.com/wp-content/uploads/2025/07/image-2.png" alt="" class="wp-image-1987" srcset="https://take1bit.com/wp-content/uploads/2025/07/image-2.png 324w, https://take1bit.com/wp-content/uploads/2025/07/image-2-220x300.png 220w" sizes="(max-width: 324px) 100vw, 324px" /></figure>



<ul class="wp-block-list">
<li><strong>生成コスト</strong>: 15枚生成で4ドル超（日本円で600円〜700円程度）</li>



<li><strong>1枚あたり</strong>: 約40円の計算</li>



<li><strong>試行錯誤コスト</strong>: 1画像につき3〜4枚の生成が必要な場合も多く、実際のコストはさらに増大</li>
</ul>



<p>サラリーマンが気軽に遊ぶような個人利用や頻繁なテストには、現状ではコスト面で課題があります。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>OpenAI GPT Image 1の画像編集機能は、従来の画像編集ツールでは困難だった「異なる画像の自然な合成」や「プロンプトベースの直感的な編集」を可能にしています。特に複数画像の合成機能は、クリエイティブな作業の可能性を大きく広げてくれます。</p>



<p>ただし、現時点ではコスト面での課題があり、プレビュー版という位置づけもあって、実用化には慎重な検討が必要です。技術的なポテンシャルは非常に高く動画編集などでも使えそうな技術なので楽しみです。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【実践レポート】AIは動画制作の相棒になるか？GeminiとYouTubeショート動画を改善した全記録</title>
		<link>https://take1bit.com/computer-ja/gemini_advice/</link>
		
		<dc:creator><![CDATA[管理者]]></dc:creator>
		<pubDate>Sat, 28 Jun 2025 01:58:11 +0000</pubDate>
				<category><![CDATA[AI・プログラミング]]></category>
		<guid isPermaLink="false">https://take1bit.com/?p=1946</guid>

					<description><![CDATA[こんにちは！自宅ベランダでツバメの巣を定点観測しているTake1bitです。 先日撮影したヒナのあくびの映像を使い、YouTubeショート動画を作成する過程で、GoogleのAI「Gemini」に動画ファイルを直接アップ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>こんにちは！自宅ベランダでツバメの巣を定点観測しているTake1bitです。</p>



<p>先日撮影したヒナのあくびの映像を使い、YouTubeショート動画を作成する過程で、GoogleのAI「Gemini」に動画ファイルを直接アップロードして、改善案を相談してみました。</p>



<p>本記事では、AIとの対話を通じて、一本の動画がどのように改善されていったのか、その全過程をレポートします。</p>



<h4 class="wp-block-heading">すべての始まり：撮れたての「あくび動画 ver.1」</h4>



<p>まず、私が最初にGeminiに見せたのが、こちらの動画です。</p>



<figure class="wp-block-video"><video height="720" style="aspect-ratio: 720 / 720;" width="720" controls src="https://take1bit.com/wp-content/uploads/2025/06/original.mp4"></video></figure>



<h3 class="wp-block-heading">AIとの対話による改善プロセス</h3>



<h4 class="wp-block-heading">改善①：視聴者離脱を防ぐ「冒頭」の改善</h4>



<p>ショート動画は最初の1秒が勝負です。Geminiから「冒頭のアイキャッチが約3秒と長く、視聴者が離脱する可能性がある」との指摘を受け、<strong>表示時間を約1.5秒に短縮</strong>し、すぐに本編が始まるように修正しました。</p>



<h4 class="wp-block-heading">改善②：動画の雰囲気を決める「BGM」の選曲</h4>



<p>次にBGMの追加です。私が使っている編集ソフトのBGMリストを見せ、「どれが良いか？」と相談したところ、的確な提案がありました。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>Geminiからのアドバイス（要約）</strong> 「リストの中では、**ピアノの『Cradle』<strong>が最高の選択肢です。『Cradle』は『ゆりかご』を意味し、生まれたばかりのヒナのための</strong>『子守唄』**としてテーマに合っています。」</p>
</blockquote>



<p>曲名からその意味を読み取り、映像の文脈に合わせて提案する能力には驚かされました。</p>



<h4 class="wp-block-heading">改善③：動画の余韻を高める「終わり方」の追求</h4>



<p>当初、私はあくびの瞬間にシャッター音と静止画を入れる演出を試していました。しかし、これについてもGeminiから鋭い指摘がありました。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>Geminiからのアドバイス（要約）</strong> 「クリエイティブなアイデアですが、シャッター音や静止画は『ここで終わり』という明確な合図になり、ループ再生されやすいショート動画の良さを妨げる可能性があります。<strong>あくびの余韻を残し、スッと終わる形がベストです。</strong>」</p>
</blockquote>



<p>プラットフォームの特性を理解したアドバイスに基づき、余計な演出を削除し、クリーンなエンディングに修正しました。</p>



<h4 class="wp-block-heading">改善④：魅力を引き出す「テロップと演出」</h4>



<p>さらに、映像表現を磨くための細やかな提案もありました。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>Geminiからのアドバイス（要約）</strong> 「客観的な『あくびショット』という文字より、<strong>『かわいい大あくび！』のような感情的な言葉</strong>の方が親近感が湧きます。また、ヒナに<strong>ゆっくりズームしていく</strong>と、視聴者の視線を自然に誘導できます。」</p>
</blockquote>



<p>これらのアドバイスもすべて反映させました。</p>



<h4 class="wp-block-heading">改善⑤：新規と既存ファンに響く「タイトル」の最適化</h4>



<p>最後にタイトルです。「DAY37」というシリーズの継続性を示しつつ、新規視聴者の目も引く「ハイブリッド型」を提案されました。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>Geminiからのアドバイス（要約）</strong> 「<code>[シリーズ名] DAYXX「[その動画固有のタイトル]」[ハッシュタグ]</code> という構成がおすすめです。」</p>
</blockquote>



<p>このアドバイスを元に、最終的なタイトルを<code>トックリツバメ観察記録 DAY37「おねむの時間」</code>としました。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">ビフォーアフター</h3>



<p>こうして、AIとの対話を経て完成した動画がこちらです。</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<a href="https://take1bit.com/computer-ja/gemini_advice/"><img decoding="async" src="//i.ytimg.com/vi/J-DCtMEe0I8/hqdefault.jpg" alt="YouTube Video"></a><br /><br />
</div></figure>



<p>変更点を表にまとめると、その進化は一目瞭然です。</p>



<figure class="wp-block-table"><div class="scrollable-table"><table class="has-fixed-layout"><thead><tr><td>項目</td><td>変更前 (Before)</td><td>変更後 (After)</td></tr></thead><tbody><tr><td><strong>冒頭</strong></td><td>約3秒の画像表示</td><td><strong>約1.5秒に短縮</strong></td></tr><tr><td><strong>映像効果</strong></td><td>固定カメラ</td><td><strong>スロープン</strong>で臨場感アップ</td></tr><tr><td><strong>テロップ</strong></td><td>客観的な説明</td><td><strong>感情的な言葉</strong>で親近感アップ</td></tr><tr><td><strong>音楽</strong></td><td>BGMなし</td><td>感動的な<strong>ピアノBGM</strong>を追加</td></tr><tr><td><strong>終わり方</strong></td><td>唐突な効果音と黒画面</td><td><strong>自然な余韻</strong>を残すクリーンな終わり方</td></tr><tr><td><strong>タイトル</strong></td><td>シンプルな説明</td><td><strong>シリーズと内容を両立</strong>した戦略的なタイトルに</td></tr></tbody></table></div></figure>



<p>それと視聴回数の結果です。これを見る限り、改善があってもなくても変わらないという結果になっていそうではあります。視聴者数だけでいうと、内容よりもほかに改善するところの方があるのかもと思いながらも、アドバイスは納得できるものが多く、今後のつながる可能性をあるように思います。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="428" height="231" src="https://take1bit.com/wp-content/uploads/2025/06/image-114.png" alt="" class="wp-image-1951" srcset="https://take1bit.com/wp-content/uploads/2025/06/image-114.png 428w, https://take1bit.com/wp-content/uploads/2025/06/image-114-300x162.png 300w" sizes="(max-width: 428px) 100vw, 428px" /></figure>



<h3 class="wp-block-heading">まとめ：クリエイターの新たな相棒</h3>



<p>動画制作の副操縦士（コパイロット）として、AIは非常に頼りになる存在でした。特に、題材をもとにストレートな改善案をくれるため、セミナーや他のYouTuberを参考にする時間がない人にとっては、強力な時短ツールになるでしょう。</p>



<p>現在はまだ動画生成自体のコストは高いですが、将来、編集ツールを直接AIが操作できるようになれば、プロに近い動画が誰でも作れてしまう世界もすぐそこまで来ているのかもしれません。</p>



<p></p>
]]></content:encoded>
					
		
		<enclosure url="https://take1bit.com/wp-content/uploads/2025/06/original.mp4" length="0" type="video/mp4" />

			</item>
	</channel>
</rss>
