火曜日, 3月 12, 2024
google_ml_kitを使って画像認識の処理をするときにカメラからの画像データはCameraImageで渡されますがInputImageに変換する必要があります。CameraImageからInputImageに変換する方法を書いた記事はインターネット上にそこそこありますが、変換に使うライブラリの一つであるgoogle_mlkit_commonsが0.4.0から大規模な変更があったためほとんどのコードがコピペでは使えません。
https://pub.dev/pack … it_commons/changelog
そのため、最新のgoogle_mlkit_commonsに合わせた変換のコードを書いてみたので好きにコピペするなりしてください
pubspec.yaml
camera: ^0.10.5+9
google_ml_kit: ^0.16.3
google_mlkit_commons: ^0.6.1
import 'dart:async';
import 'package:camera/camera.dart';
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
import 'package:google_ml_kit/google_ml_kit.dart';
Future<InputImage> convertCameraImageToInputImage(
CameraImage cameraImage, CameraDescription camera) async {
final WriteBuffer allBytes = WriteBuffer();
for (final Plane plane in cameraImage.planes) {
allBytes.putUint8List(plane.bytes);
}
final bytes = allBytes.done().buffer.asUint8List();
final Size imageSize =
Size(cameraImage.width.toDouble(), cameraImage.height.toDouble());
final camera = widget.cameras.firstWhere(
(camera) => camera.lensDirection == CameraLensDirection.front,
);
final InputImageRotation imageRotation =
_rotationIntToImageRotation(camera.sensorOrientation);
final InputImageFormat inputImageFormat =
InputImageFormatValue.fromRawValue(cameraImage.format.raw) ??
InputImageFormat.nv21;
final inputImageData = InputImageMetadata(
size: imageSize,
rotation: imageRotation,
format: inputImageFormat,
bytesPerRow: cameraImage.planes[0].bytesPerRow,
);
final result = InputImage.fromBytes(bytes: bytes, metadata: inputImageData);
return result;
}
InputImageRotation _rotationIntToImageRotation(int rotation) {
switch (rotation) {
case 0:
return InputImageRotation.rotation0deg;
case 90:
return InputImageRotation.rotation90deg;
case 180:
return InputImageRotation.rotation180deg;
case 270:
return InputImageRotation.rotation270deg;
}
return InputImageRotation.rotation0deg;
}
月曜日, 2月 12, 2024
モニターに繋いだゲーム機からの音声をpcから鳴らそうとするとやれステレオミキサーを買えだのライン入力端子にどうこうなどライン入力なんて無いpcには無理な話でステレオミキサーは結構な価格します。しかし、今回3.5mmのオーディオケーブルだけでpcからゲーム機の音とpcの音を一緒に出す方法を見つけたので書いておきます。
必要なもの
- ゲーム機
- モニターやテレビ
- マイク端子付きのpc
- ゲーム機とモニターを繋ぐhdmiケーブル
ここまでは当然として、
- 3.5mmオーディオケーブル
近くのハードオフとかいけば数百円で買えるとおもいます。
やり方
- モニターの音声出力とpcのマイク入力を3.5mmオーディオケーブルを接続します。
- コントロールパネルを開いて、ハードウェアとサウンドを選びます。
- サウンドを選びます。
- 録音を選びます。
- マイクを選んでプロパティを選びます。
- 聴くを選びます。
- このデバイスを聴くにチェックを入れます。
- 完成!
問題点
- マイクが使えない
別でusbか何かでマイクを繋いでそっちを使うように設定しないといけないと思います。
でも、どうせぼっちでマイク使わないだろうしステレオミキサー代が浮いたと思えばいいよね☆
木曜日, 3月 31, 2022
pcやandroidのdolphinエミュレータでCTGP Revolutionがやりたいと思ってもdolphinエミュレータに対応しておらず、諦めてwii本体やwiiu本体を引っ張り出さざるを得なくなり、憂鬱になってしまうと思います。もちろんCTGP Revolutionをdolphinエミュレータで実行する方法は現時点では無いと思いますが、その代わりとなり得るものを見つけ、そこそこ快適だった夢を見たため紹介しようと思います。
何をするのか
Wiimms Mario Kart Funというものを導入します。これはマリオカートのisoデータにパッチを当ててコースを追加するという手段を用いてたくさんのカスタムトラックを追加します。Wiimms Mario Kart FunのwiimmsというのはCTGP Revolutionでも使用しているwifiコネクションサービスであるwiimmfiを作った人です。
用意するもの
- pc(windowsじゃ無いと苦労するかも)
- マリオカートwiiのisoデータ
- NTFSでフォーマットされた記憶領域(これじゃ無いと私の環境ではエラーを起こして動きませんでした。)
- 7zip(僕は初めから使っていたのですがこれが無いと動かないという噂があるため書いておきます。)
手順
- まずはMario Kart Funのサイトにアクセスします。
ここです→https://wiki.tockdom.com/wiki/Wiimms_Mario_Kart_Fun
- ここの最初のリリース日が新しいものを選んでダウンロードします。
Wiimms Mario Kart Historyは今までの全てのコースの全てのバージョンを追加するというものなので、追加すると1000を超えるコースの量に圧倒されます。w
- 私はchromeでやりましたがchromeだとダウンロードするときにリンクをクリックしただけだとダウンロードできませんでした。なのでリンクを右クリックしてリンク先を保存を選択するとダウンロードが開始されますが、chromeからコンピュータに損害を与える可能性が〜と警告がありますが元々CTGP Revolutionなどの改造をしようとしていた人にはそんな覚悟はできている(?)と思うので無視してダウンロードします。
- ダウンロードしたものを解凍し、中身を見るとcreate-images.batというのがあると思うのでそこと同じ階層にマリオカートwiiのisoデータを入れます。
- windowsならcreate-images.batを起動します。(僕の環境ではうまくいきませんでしたがmacなどのその他ならcreate-images.shを起動させてください)
- 指示に従って入力してenterを押していきます。(英語ですが)
通常であれば1個目はenで、2個目はJ、3個目はjp、4個目はyes、5個目はisoだと思います。
- 処理が終わるまで待ちます。
- Press any key to continueと表示されたら完了です。
- するとnew-imageというフォルダの中にパッチを当て終わったマリオカートwiiのファイルが出来上がっています
- 完成です。dolphinエミュレータなどで読み込んで遊びましょう。
最後に
いい夢だったなぁ〜(素知らぬ顔)
水曜日, 2月 23, 2022
皆さんはもしブログを立ち上げるとなったら何を使いますか?やっぱりwordpressですかね?
ひねくれてるかもしれないですがwordpressを入れたくないなぁと思って代わりにこのFlatPressを導入しました。このブログのことです。
そこでWordPress使ったことないですがここが便利だなぁと思った点とここが不便だなぁという点を書き出してみました。
よかった点
- とにかく手軽
導入がクソ簡単だった。FlatPress公式サイトからダウンロードして上げ、あとは道なりに進んでいけば出来上がります。
悪かった点
ほとんどは使用人口が少ないことに起因していると思います。
- プラグインが少ない
- テーマが少ない
- 日本語の記事がほとんどない
日本語のgoogle検索でヒットした件数5200件ほど・・
- なんなら英語ですらあんまりない
作られたのはドイツらしい。
テーマやプラグインが充実すればめちゃくちゃすごいのになぁ・・・
最後に
間違ってたら加筆修正します・・・
画像を処理するAIのデータセットなどで画像を収集しなければならない時が時々ありますよね。
みなさんは画像収集する時どのようにして集めていますか?webスクレイピングの有名な手段としては、
- selenium
- Beautiful Soup
- Requests
- Scrapy
などがあると思いますが、画像収集という点だけに絞れば、もっと手軽に試せる手段があります。それがicrawlerです。
icrawlerとは
ウェブクローラ用のライブラリで画像や動画をスクレイピングすることができます。
使い方
まず、pipでicrawlerをインストールします。(既にインストールしている人はスキップしてください。)ターミナルやコマンドプロンプトなどで
pip install icrawler
です。
次に、インポートします。現在、icrawlerが機能する検索エンジンはbaidu・bingのみです。googleも対応していたようですが、現在は対策されたためエラーが出て使えません。日本人がbaiduを使うときはよっぽどないと思いますのでbingを使うという体で進めていきます。bingを使うときのicrawlerをインポートするコードは
from icrawler.builtin import BingImageCrawler
です。
crawler = BingImageCrawler(downloader_threads=4,storage={"root_dir": "apple"})
このコードはどの検索エンジンで何スレッドでクロールし、その結果をどこに保存するか決めています。このコードではbingで4スレッドでクロールをし、結果をappleというフォルダに入れるという設定になっています。
crawler.crawl(keyword="りんご", max_num=10)
このコードはどんなワードで検索し、その画像を何個保存するのかを決めています。このコードはりんごというキーワードで検索し、出てきた画像を10個保存するということになっています。
まとめ
これらをまとめると
from icrawler.builtin import BingImageCrawler
crawler = BingImageCrawler(downloader_threads=4,storage={"root_dir": "apple"})
crawler.crawl(keyword="りんご", max_num=10)
となります。Requestsなどで書くよりも遥かに短いです。手軽なので、試してみてエラーが出て動かないとなってから変えてみても遅くないというのがメリットだと思います。しかし、ここまで書いておきながら時間があるのであれば他のライブラリは圧倒的に汎用性が高いので画像のクロールを通してseleniumやRequestsなどの他のライブラリに慣れておくというのは悪くないのかも・・・とも思ってしまいました。