(Cの開発環境を作る

 今回はC言語の開発環境を構築していきます。

 

これまではpythonとarduino言語を主に使っていましたが(これからも)Cで動かしてみたいコードができたので環境構築することに決めました。

 

VScodeでCを使うにはpythonのように拡張機能をインストールして終わりというわけではなくより複雑で注意点がいくつかあります。そこで今回は自分用の忘備録として手順をまとめておきます。

 

すべての作業が完了してから記事を書いているので途中のスクリーンショットなどはぼありません詳しくは参考URLを参照してください。

■手順

① MinGW64をGitHubからダウンロードする
以下のリンクからMinGW64をダウンロードします。

https://github.com/niXman/mingw-builds-binaries/releases/download/15.1.0-rt_v12-rev0/x86_64-15.1.0-release-win32-seh-ucrt-rt_v12-rev0.7z

 

②ダウンロードした7zファイルを解凍し、C:\Program Files (x86) の中に

 フォルダーごと配置します。

③ PATHを追加する
1,タスクバーの検索ボックスに「環境変数」と入力します。
2,「環境変数を編集」を選択し、PathにMinGW64のbinフォルダーを追加します。
※管理者権限がないとPathの追加ができません。
その場合は、cmdを管理者権限で開き、以下のコマンドを実行してください。

SystemPropertiesAdvanced

⑤C:\Program Files (x86)\mingw64\binと設定

 

 

⑥cmdでインストールされたか確認

・「gcc --version」と入力してENTER

 

※なお、Cドライブにインストールされているため、いつものように任意の場所でフォルダーを作成して実行しても、うまく動作しません(※自分の環境の場合)。
必ず 「C://Users/ユーザー名」 の中にフォルダーを作成し、その中で実行する必要があります。

 

⑦拡張機能が機能しているかはわかりませんが

「code runner」と「C/C++拡張機能」はインストールしておきました。

 

■完成!

・普通にコンパイルできます。

 

 

参考サイト:Visual Studio CodeでC言語をデバッグ実行する環境構築|Aruca

      C/C++をVSCodeで開発するための環境構築 #MinGW - Qiita

      (spotDLを使ってspotifyの曲を無料でダウンロード

  今回はspotifyDLを使って音楽をダウンロードし、ネットが使えない場所でも音楽が聴けるようにしたいと思います。(著作権違反になる可能性あり)

 

spotDLとは

Spotifyで配信されている楽曲をYoutube Musicからダウンロードできるツールのこと

 

■spotDLを使うための手順

① Pythonのインストール
・まずPythonをインストールします。Welcome to Python.orgから

 最新版をダウンロードして、「Add Python to PATH」にチェックを入れて

 インストールします。

 

②spotDLのダウンロード

・PowerShellを開いて以下を入力↓

pip install spotdl

③ FFmpegの自動インストール
次に、音声を処理するためのFFmpegを導入します↓

winget install --id=Gyan.FFmpeg -e

これで曲をダウンロードする手順は完了!

あとはspotdlのあとにスペースを空けてspotifyの曲のURLかプレイリストのURLを張ったらwindowsのユーザーのところにmp3が保存されます。


おまけ

スマホにmp3を入れてオフラインで再生するときにはdocumentsがおすすめです。iphon標準搭載されている、filesよりも機能が豊富で、シャッフル再生や曲を飛ばすこともできます。

 

 

2026/3/2 追記

現在、spotDLの仕様変更により、これまでの方法では正常にダウンロードできなくなっているようです。
そのため、代替手段としてytdlpを使用して楽曲をダウンロードし、取得後にアーティスト名や曲情報を手動で入力して整理する方法が現実的だと思われます。

多少手間はかかりますが、ご参考までに。

一応ほかの人の対策方法:https://note.com/osmaniax

          (icrawlerでネットの画像を収集してみる。

  今回はicrawlerでネットの画像を収集してみます。

目的は機械学習のために大量の写真が必要だったため

 

◎icrawlerとは

→pythonで簡単に画像を収集するためのフレームワークです。

 コードも短くていいので使いやすい。

 

■使い方

 

①ライブラリをインストールする。

pip install icrawler

②コードをかく

・keywordのとこに取得したい写真の検索ワードをかくと自動で作った

 フォルダに写真が保存されます。

・maxが1000なので毎回1000枚取得できるわけではありません。

from icrawler.builtin import GoogleImageCrawler

crawler = GoogleImageCrawler(storage={"root_dir": "C:/ユーザー名/Desktop/ugui_images"})
crawler.crawl(keyword="やまめ_写真", max_num=1000)

 


ほかの取得方法としてはbing image search APIというのがあります。

安定的に大量の画像を取得可能です。またAPIキー取得→検索 → ダウンロード → 保存の流れを自動化できます。


 

■クローリングの実際の流れ
①検索キーワードをGoogle画像検索URLにエンコードして送信
 ページ番号を変えながら複数の結果ページを取得
②各ページのHTMLを正規表現やJSONスニペット解析で解析
 imgurl= や src などのパターンから画像URLを抽出
③URLをキューに格納
④キューからURLを受け取り、requestsなどでGET
⑤画像を保存フォルダ(root_dir)にファイル名付きで保存
 例外時はリトライし、失敗をログに記録

       (物体検知AI YOLOのpythonライブラリを使ってみた

 今回は、物体検知AI YOLOのpythonライブラリを使ってみます。

踏み込んだ内容ではなくとりあえずYOLOのpythonライブラリを使って物体検出を知る第一歩としてやってみます。

 

YOLO(You Only Look Once)とは

→物体検出のためのアルゴリズムであり、リアルタイムでの物体検出を可能にするディープラーニング技術。 YOLOは、画像や動画内の物体を一度の処理で検出することができ、従来の手法に比べて高い精度と速度を誇る。

 

 

とりあえずライブラリを使ってみる。

 

手順

1,VScodeのコマンドにultralyticsライブラリをインストール

pip3 install ultralytics

2,コードを書く

from ultralytics import YOLO

model = YOLO("yolov8n.pt")
results = model("画像URL")

#結果の表示
results[0].show()

3,実行結果

・ミスはありますがまぁまぁの精度だと思います。

 

しかしノートパソコンでは正しく実行できたわけですが、デスクトップパソコンはなぜか下記のような文字列がコマンドラインに表示されました

WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Video stream unresponsive, please check your IP camera connection.
0: 480x640 1 chair, 1 couch, 1 tv, 1 book, 33.0ms
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Video stream unresponsive, please check your IP camera connection.
0: 480x640 1 chair, 1 couch, 1 tv, 1 book, 36.1ms
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Video stream unresponsive, please check your IP camera connection.
0: 480x640 1 chair, 1 couch, 1 tv, 1 book, 33.3ms
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Waiting for stream 0
WARNING Video stream unresponsive, please check your IP camera connection.
0: 480x640 1 chair, 1 couch, 1 tv, 1 book, 31.1ms
WARNING Waiting for stream 0

これが大量に表示される原因はchat gptいわく

 model() に渡している URL が 静止画像ではなくストリーム扱い になっている

 一部の URL だと YOLO が動画ストリームとして解釈することがあります。

ということでした。

 

ストリーム扱いになってるっぽいのでURLから取得した画像を静止画にしてYOLOに物体検出してもらいます。

 

というのを書いた後もう一回処理を実行したら成功しました。

やはりURLがおかしかったようです。

 

成功しましたが、ついでなので静止画にするプログラムも載せときます。


 

静止画にしてから処理するプログラム

処理時間も計測できるようにしました。

from ultralytics import YOLO
import time
import requests
from PIL import Image
from io import BytesIO

# 画像を取得
url = "https://cdn.locari.jp/upload/post_element/picture/8513009/mobile_11-680x680.jpg"
response = requests.get(url)
img = Image.open(BytesIO(response.content))

model = YOLO("yolov8n.pt")

start_time = time.time()
results = model(img)  # ここで PIL Image を渡す
end_time = time.time()

print(f"処理時間: {end_time - start_time:.3f}")

results[0].show()

 

◎処理結果

0: 480x640 3 cups, 3 chairs, 1 dining table, 1 remote, 3 books, 45.0ms
Speed: 19.3ms preprocess, 45.0ms inference, 2.3ms postprocess per image at shape (1, 3, 480, 640)
処理時間: 0.096 秒

 

 

 

最後にノートPCとデスクトップPCの処理時間を計測してデスクトップの必要性が薄れてきた今、デスクトップの威厳を見せます。

from ultralytics import YOLO
import time

model = YOLO("yolov8n.pt")

start_time = time.time()
results = model("https://asajikan.jp/wp-content/uploads/2022/03/IMG_2367.jpg-640x480.jpg")
end_time = time.time()


print(f"処理時間: {end_time - start_time:.3f}")

#結果の表示
results[0].show()

結果

ノートpcの処理時間  0.689秒

デスクトップpcの処理時間  0.090 秒

一回しかやっていないので誤差ありまくりだとおもうが

約8倍差がある。

         (海水魚とさんごを新たにお迎えしました。

  

 今回は半年ぶりに海水生体を水槽にお迎えしました。

前回はカクレクマノミ、シライトイソギンチャク、るりやっこを追加しましたがるりやっこ以外天に召されました。

 

シライトイソギンチャクの死因は買ったときから白く褐虫藻がいなく状態が悪かったからだと考えられます。カクレクマノミは分かりません。

 

今回追加した生体は以下のとおり

・コエダナガレハナサンゴ×1

5489/円

大体10センチくらいあります。

光とカメラの具合によって先っちょが白く見えてますが、実際に見るとピンクで本体?の部分のみどりももっと濃いです。

・ミズタマハゼ×1

1969/円

ずっと砂を食べてます。でも意外と泳ぎもうまくたまに水面まで上がっている。

よく砂にうっすらと苔が生えるのでその防止にもやくだってくれるでしょう。

・デバスズメダイ×8

328円/匹

安定のデバスズメダイだが今までのデバスズメダイは1匹たりとも長生きしていないので、今回こそはがんばってほしい。

合計金額:10082

 

 

現在の水槽の様子

 

余談

行きは途中まで走り帰りは電車で帰ってきたんですが、帰りも帰りで4キロほど歩かなくてはならずそれぞれ別のパックに入れてもらっていたのでめっちゃしんどかった。

40分くらいなのだが分ける必要はあったのか。

 

温度合わせ中

・生体をバケツに入れチューブでちょとちょろと水合わせをしたほうがいいのかもしれませんが、準備が大変なので袋に切れ込みを入れて水合わせしました。

・道中が暑かったということもあり温度合わせは30分くらい行いました。

 

・小枝さんは導入直後の様子導入直後にもかかわらずポリプがしっかりと開いていました。

 

ひごぺっと