20201119のLinuxに関する記事は8件です。

UbuntuでMSXのプログラムをカセットテープから抽出してみた

中古ゲーム屋でMSX用ソフト「ミステリーハウス」のゲームプログラムが収められたカセットテープを保護したので、中のデータのサルベージに挑戦してみました。

IMG_20201115_112853079.jpg

*「カセットテープにプログラムが入っているってどういうこと?」という方はこちらをどうぞhttps://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%80

用意するもの

*カセットテープ(ミステリーハウス)
*ラジカセ
*オーディオケーブル
*Audacity(https://www.audacityteam.org/)
*MSXcastools(http://home.kabelfoon.nl/~vincentd/)
*PC

ラジカセのイヤフォンとPCのマイクジャックをオーディオケーブルで接続

Audacityを起動

サンプリング周波数を44100に設定

48000でも良いらしい
audamenu3.jpg

録音する

Audacityで録音を開始

ラジカセで再生開始

波形を見てみる

CTRL+ホイールで表示を拡大すると音声の波形が見えてきます。
いわゆる矩形波というやつですね。
Screenshot from 2020-11-19 21-01-29.png
一方別のテープには正弦波っぽい波形が収められていました。
Screenshot from 2020-11-19 21-05-06.png

ボリュームについて考える

矩形波の場合は波形が上下に多少振り切っても問題なさそうですが正弦波は山谷の頂点部分が振り切らない程度にボリュームを調整した方がよさそうです。
ボリュームを調整しながら何度か録音してみましょう。
いい感じに録音できたら、このへんのメニューから16bitPCMを選択しておきます。
audamenu.jpg

ファイルに保存

ファイル>書き出し>WAVとして書き出し
audamenu2.jpg

MSXCastools

Wineのインストール

MSXCastoolsは本来Windows用ソフトなため、起動するためにWineをインストールしておきます。
sudo apt-get install wine

MSXCastoolsの起動

コマンドラインを起動し、MSXCastoolsのフォルダに移動したら以下のコマンドで起動します。
wine MSXcastoolsUI.exe
Screenshot from 2020-11-19 21-20-37.png

WAVファイルを開く

"Drag file here"と書かれた部分へ先程保存したWavファイルをドラッグします。
Screenshot from 2020-11-19 21-23-36.png

チューニング

ウィンドウ上部のチェックボックスは両方ともとりあえずONで
"Push Here to canvert to cas"と書かれたボタンを押すとcas形式ファイルが保存されます。
3つのつまみを調整しながらファイルサイズが最大になるまで何度か保存してみましょう。

ファイルを覗いてみる

コンソールを起動して、casファイルが保存されたディレクトリへ移動します。
hexdumpコマンドでファイル内部を表示してみましょう。
(インストールされていない場合は sudo apt-get install hexdump)

hexdump -C ./MisteryHouse.cas

ゲーム内で使用するコマンドらしきものが見えてきました。
どうやらデータが上手く取り出せたっぽいですね。
Screenshot from 2020-11-19 21-33-55.png

エミュで起動してみる。

MSXエミュレータは様々ありますが、とりあえずWEB版の https://webmsx.org/ がお手軽です。

ファイルのロード

下部のアイコンからLoad tape imageを選択し、作成したcasファイルを選択します。

Screenshot_2020-11-19 WebMSX - The online MSX emulator.png

cload

カセットからデータを読み込むコマンド「cload」を入力し、エンターキーを押すと・・上手く読み込めた様です。
Screenshot_2020-11-19 WebMSX - The online MSX emulator(1).png

run!

ロードしたプログラムを実行するには「run」と入力してエンターまたはF5キーを押します。
エイ!
Screenshot_2020-11-19 WebMSX - The online MSX emulator(2).png

起動しましたね!成功です!

その後

しかしタイトル画面後の追加ロードは成功しませんでした。
散々試行錯誤したあげく元の音声データを見返してみると・・・

うーむどうやらテープが劣化して信号が不完全な部分が発生してしまった様です。
Screenshot from 2020-11-19 21-47-30.png

しかしまあ30年以上前のメディアから一部のデータを取り出せただけでもラッキーと言えるでしょう。
お手元にまだ当時のカセットテープが残っていたら、再生手段が消え去る前に一度チャレンジしてみてください。

ではでは!
Screenshot_2020-11-19 WebMSX - The online MSX emulator(2).png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

UbuntuでMSXのプログラムをカセットテープからバックアップしてみた

中古ゲーム屋でMSX用ソフト「ミステリーハウス」のゲームプログラムが収められたカセットテープを保護したので、中のデータのサルベージに挑戦してみました。

カセットテープの外観です。ゲーム業界黎明期の空気が閉じ込められた素晴らしい一品です。
IMG_20201115_112853079.jpg

*「カセットテープにプログラムが入っているってどういうこと?」という方はこちらをどうぞhttps://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%80

ご注意

*この記事で扱っている内容は自己所持しているメディアのバックアップの記録です。自己で所持していないソフトウェアの複製は違法行為となりますのでご注意下さい。
*ゲームのスクリーンショットは引用の範囲で利用しています。
*著作権の保護期間をもうちょっと短くしないとデジタル考古学的資産がまともに保護されないまま消えてしまうことが危惧されます。

用意するもの

*カセットテープ(ミステリーハウス)
*ラジカセ
*オーディオケーブル
*Audacity(https://www.audacityteam.org/)
*MSXcastools(http://home.kabelfoon.nl/~vincentd/)
*PC

ラジカセのイヤフォンとPCのマイクジャックをオーディオケーブルで接続

Audacityを起動

サンプリング周波数を44100に設定

48000でも良いらしい
audamenu3.jpg

録音する

Audacityで録音を開始

ラジカセで再生開始

波形を見てみる

CTRL+ホイールで表示を拡大すると音声の波形が見えてきます。
いわゆる矩形波というやつですね。
Screenshot from 2020-11-19 21-01-29.png
一方別のテープには正弦波っぽい波形が収められていました。
Screenshot from 2020-11-19 21-05-06.png

ボリュームについて考える

矩形波の場合は波形が上下に多少振り切っても問題なさそうですが正弦波は山谷の頂点部分が振り切らない程度にボリュームを調整した方がよさそうです。
ボリュームを調整しながら何度か録音してみましょう。
いい感じに録音できたら、このへんのメニューから16bitPCMを選択しておきます。
audamenu.jpg

ファイルに保存

ファイル>書き出し>WAVとして書き出し
audamenu2.jpg

MSXCastools

Wineのインストール

MSXCastoolsは本来Windows用ソフトであり、一般的な方法では起動できません。そこでここでは、LinuxでWindows用ソフトウェアを起動できる互換レイヤ「Wine(https://ja.wikipedia.org/wiki/Wine )」をインストールしておきます。
sudo apt-get install wine

MSXCastoolsの起動

コマンドラインを起動し、MSXCastoolsのフォルダに移動したら以下のコマンドで起動します。
wine MSXcastoolsUI.exe
Screenshot from 2020-11-19 21-20-37.png

WAVファイルを開く

"Drag file here"と書かれた部分へ先程保存したWavファイルをドラッグするとメイン画面が表示されます。
Screenshot from 2020-11-19 23-22-41.png

チューニング

ウィンドウ上部のチェックボックスは両方ともとりあえずONで
"Push Here to canvert to cas"と書かれたボタンを押すとcas形式ファイルが保存されます。
3つのつまみを調整しながらファイルサイズが最大になるまで何度か保存してみましょう。

ファイルを覗いてみる

コンソールを起動して、casファイルが保存されたディレクトリへ移動します。
hexdumpコマンドでファイル内部を表示してみましょう。
(インストールされていない場合は sudo apt-get install hexdump)

hexdump -C ./MisteryHouse.cas

ゲーム内で使用するコマンドらしきものが見えてきました。
どうやらデータが上手く取り出せたっぽいですね。
Screenshot from 2020-11-19 21-33-55.png

エミュで起動してみる。

MSXエミュレータは様々ありますが、とりあえずWEB版の https://webmsx.org/ がお手軽です。

ファイルのロード

下部のアイコンからLoad tape imageを選択し、作成したcasファイルを選択します。

Screenshot_2020-11-19 WebMSX - The online MSX emulator.png

cload

カセットからデータを読み込むコマンド「cload」を入力し、エンターキーを押すと・・上手く読み込めた様です。
Screenshot_2020-11-19 WebMSX - The online MSX emulator(1).png

run!

ロードしたプログラムを実行するには「run」と入力してエンターまたはF5キーを押します。
エイ!
Screenshot_2020-11-19 WebMSX - The online MSX emulator(2).png

起動しましたね!成功です!

その後

しかしタイトル画面後の追加ロードは成功しませんでした。
散々試行錯誤したあげく元の音声データを見返してみると・・・

うーむどうやらテープが劣化して信号が不完全な部分が発生してしまった様です。
Screenshot from 2020-11-19 21-47-30.png

しかしまあ30年以上前のメディアから一部のデータを取り出せただけでもラッキーと言えるでしょう。
お手元にまだ当時のカセットテープが残っていたら、再生手段が消え去る前に一度チャレンジしてみてください。

ではでは!
Screenshot_2020-11-19 WebMSX - The online MSX emulator(2).png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

UbuntuのブータブルUSBメモリを作成する

新しいPCを買ったのでUbuntuをインストールする。
インストールを行うためのブータブルUSBメモリを作成する。
USBメモリのセットアップはUbuntu上で行う。

基本的に以下の公式サイトの記載通りに作業する。
Create a bootable USB stick on Ubuntu
https://ubuntu.com/tutorials/create-a-usb-stick-on-ubuntu

Windows版、MacOS版もある。
Create a bootable USB stick on Windows
https://ubuntu.com/tutorials/create-a-usb-stick-on-windows

Create a bootable USB stick on macOS
https://ubuntu.com/tutorials/create-a-usb-stick-on-macos

1.必要なもの
https://ubuntu.com/tutorials/create-a-usb-stick-on-ubuntu#2-requirements
・4GB以上の空のUSBメモリ(USBメモリ上のデータは全て削除されるので注意)
・Ubuntu Desktop 14.04以上
・ダウンロードしたUbuntu ISOファイル

2.Startup Disk Creator起動
https://ubuntu.com/tutorials/create-a-usb-stick-on-ubuntu#3-launch-startup-disk-creator
USBメモリを挿す
Startup Disk Createrを起動
$ usb-creator-gtk

3.ブータブルUSBの作成
https://ubuntu.com/tutorials/create-a-usb-stick-on-ubuntu#4-iso-and-usb-selection
アプリを起動すると
・ダウンロードフォルダに置かれているISOイメージ一覧
・PCに接続されているUSBメモリ一覧
が見える。
それぞれの一覧から使用するものを選択して”ブータブルUSBの作成”ボタンを押す。
これでブータブルUSB完成。非常に簡単。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Wireshark Development Release(3.3.1) をUbuntuでbuildしてInstall

WiresharkをDownload
https://www.wireshark.org/#download

"Source Code"を選択
https://1.as.dl.wireshark.org/src/wireshark-3.3.1.tar.xz

$ tar xvJf wireshark-3.3.1.tar.xz

$ less wireshark-3.3.1/INSTALL
INSTALLドキュメント確認

QtとGLibのdevelopment packagesが必要。
$ pkg-config glib-2.0 --modversion
$ pkg-config Qt5Widgets --modvers

Install Qt 5 on Ubuntu
https://wiki.qt.io/Install_Qt_5_on_Ubuntu
sudo apt install qt5-default

glibインストール。
$ sudo apt install libglib2.0-dev

$ pkg-config glib-2.0 --modversion
2.64.3
$ pkg-config Qt5Widgets --modvers
5.12.8

$ sudo apt install libpcap-dev

私の環境ではPerlはインストールされていた。
$ perl --version

This is perl 5, version 30, subversion 0 (v5.30.0) built for x86_64-linux-gnu-thread-multi
(with 46 registered patches, see perl -V for more detail)

Copyright 1987-2019, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

Pythonもインストールされていた。
$ python3 --version
Python 3.8.5

cmakeをインストール
$ sudo apt install cmake
$ cmake --version
cmake version 3.16.3

CMake suite maintained and supported by Kitware (kitware.com/cmake).

$ cmake ./wireshark-3.3.1
cmakeでエラーになった足りないライブラリをインストール
sudo apt install libgcrypt20-dev
sudo apt install libc-ares-dev
sudo apt install libssh-dev
sudo apt install gettext
sudo apt install qttools5-dev
sudo apt install qtmultimedia5-dev
ここまでやってやっとcmake成功。

$ make
ビルド成功
-> run/wiresharkができている

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

BlueZビルド&インストール

wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.54.tar.xz
tar xvJf bluez-5.54.tar.xz
cd bluez-5.54

sudo apt install libglib2.0-dev libdbus-glib-1-dev libudev-dev libical-dev libreadline-dev

./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var
make
sudo make install

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

manで基本的なコマンドの日本語表示がされない原因は?

環境

Vagrant + Ubuntu 16.04.5 LTS

対応

manのトップページを表示すると、ちゃんと日本語マニュアルが表示されるのだが。

$man man

このような基本的なコマンドが何故か英語表示される。

$man ls
$man cat

ロケールには、ja_JP.utf8の設定はちゃんとされています。

$locale -a

manの日本語パッケージは入っています。

$apt list --installed | grep manpages-ja
manpages-ja/xenial,xenial,now 0.5.0.0.20140515+dfsg-2 all [インストール済み]
manpages-ja-dev/xenial,xenial,now 0.5.0.0.20140515+dfsg-2 all [インストール済み]

manの各コマンド単位のパッケージが存在するか見てみると、catとlsが存在していない。何故?

$ls -l /usr/share/man/ja/man1/{cat,ls,man}.1.gz
ls: '/usr/share/man/ja/man1/cat.1.gz' にアクセスできません: そのようなファイルやディレクトリはありません
ls: '/usr/share/man/ja/man1/ls.1.gz' にアクセスできません: そのようなファイルやディレクトリはありません
-rw-r--r-- 1 root root 15K 11月  7  2015 /usr/share/man/ja/man1/man.1.gz

取り敢えず、最新版をインストールする事に。

$sudo apt install -y manpages-ja manpages-ja-dev

インストールされたようです。

$ls -l /usr/share/man/ja/man1/{cat,ls,man}.1.gz
-rw-r--r-- 1 root root 1.4K 12月 16  2015 /usr/share/man/ja/man1/cat.1.gz
-rw-r--r-- 1 root root 4.0K 12月 16  2015 /usr/share/man/ja/man1/ls.1.gz
-rw-r--r-- 1 root root  15K 11月  7  2015 /usr/share/man/ja/man1/man.1.gz

漸く、日本語表示がされるようになりました。

$man ls
$man cat
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux EC2インスタンスをAWS Managed Microsoft ADへシームレスに参加させる

Linux EC2インスタンスをAWS Managed Microsoft ADに参加させてIDの統合管理をしている環境があるのですが、今までインスタンスが増える度に手動でAD参加コマンド実行、パスワード入力という手順を実施してインスタンスのデプロイに非常に時間がかかっていました。加えてEC2 AutoScalingの検討しておりこのパスワード入力の壁越えなきゃなーと調べていたら、今年に入りシームレスなAD参加がサポートされていました!

Amazon EC2 for Linux インスタンスを AWS Directory Service にシームレスに参加させる

ということでLinuxインスタンスデプロイ時にAD参加させる方法を検証してみました。
ちなみに、冒頭で触れた今までのAD参加方法はこちら↓↓
Linux インスタンスを手動で結合する

今回検証した手順はこちら↓↓
Linux EC2インスタンスをシームレスに参加 AWS Managed Microsoft AD ディレクトリ

前提条件

まず2020/11/17時点でサポートされているディストリビューション、バージョンは以下となります。

  • Amazon Linux AMI 2018.03.0
  • Amazon Linux 2 (64 ビット x86)
  • Red Hat Enterprise Linux 8 (HVM) (64 ビット x86)
  • Ubuntu Server 18.04 LTS & Ubuntu Server 16.04 LTS
  • CentOS 7 x86-64
  • SUSE Linux Enterprise Server 15 SP1

Noteに
"Distributions prior to Ubuntu 14 and Red Hat Enterprise Linux 7 do not support the seamless domain join feature."
とありましたので、RHEL7はOKと判断しRHEL7で検証しました。

また、対象インスタンスにはAWS Systems Manager (SSM Agent) バージョン 2.3.1644.0 以上が必要となっています。

ということで、

検証環境

  • Region: Tokyo
  • DirectoryService: AWS Managed Microsoft AD Standard ※作成済み
  • AD参加するインスタンス: RedHat Enterprise Linux 7.9
  • ADに接続して操作するインスタンス: WindowsServer 2019 ※作成済み

environment.png

では、検証

AWS Managed Microsoft ADへRHEL7.9インスタンスを起動時に参加させます。
まずはドメインユーザーの作成から。

AD参加用ドメインユーザーの作成

LinuxインスタンスをAD参加させるため、コンピュータアカウントの作成権限をもつドメインユーザーをサービスアカウントとして設定します。
今回の構成で言うと、AD参加済みのWindowsServer 2019にて、"Active Directory ドメインサービス"を開いて(別のユーザーとして実行からMicrosoft ADのAdminユーザーで接続)ユーザを新規作成しておきました。

ユーザー追加.png

次に作成したドメインユーザーに対し権限を付与します。AD参加させるためだけに使用するものとなりますので、できる限り最小限の権限をもたせる形にしたい、ということで下記の通りPowerShellコマンドが用意されていました。1行目の$AccountNameには先程作成したドメインユーザー名を入力します。

$AccountName = 'awsSeamlessDomain'
# DO NOT modify anything below this comment.
# Getting Active Directory information.
Import-Module 'ActiveDirectory'
$Domain = Get-ADDomain -ErrorAction Stop
$BaseDn = $Domain.DistinguishedName
$ComputersContainer = $Domain.ComputersContainer
$SchemaNamingContext = Get-ADRootDSE | Select-Object -ExpandProperty 'schemaNamingContext'
[System.GUID]$ServicePrincipalNameGuid = (Get-ADObject -SearchBase $SchemaNamingContext -Filter { lDAPDisplayName -eq 'Computer' } -Properties 'schemaIDGUID').schemaIDGUID
# Getting Service account Information.
$AccountProperties = Get-ADUser -Identity $AccountName
$AccountSid = New-Object -TypeName 'System.Security.Principal.SecurityIdentifier' $AccountProperties.SID.Value
# Getting ACL settings for the Computers container.
$ObjectAcl = Get-ACL -Path "AD:\$ComputersContainer" 
# Setting ACL allowing the service account the ability to create child computer objects in the Computers container.
$AddAccessRule = New-Object -TypeName 'System.DirectoryServices.ActiveDirectoryAccessRule' $AccountSid, 'CreateChild', 'Allow', $ServicePrincipalNameGUID, 'All'
$ObjectAcl.AddAccessRule($AddAccessRule)
Set-ACL -AclObject $ObjectAcl -Path "AD:\$ComputersContainer"

上記コマンドをWindowsServer 2019で実行し、awsSeamlessDomainを必要最小限の権限を持ったサービスアカウントとして設定しました。

Secrets Managerにサービスアカウント情報を保存

インスタンス起動時のドメイン参加において、先程作成したサービスアカウントを利用するため、Secrets Managerに情報を保存しておきます。
Secrets Managerのサービスコンソールに遷移後、Store a new secretをクリックし、下図の通り設定しました。

  1. Other type of secretsを選択し、key/valueにサービスアカウント名とパスワードを指定します。
    secretmanager01.png

  2. Secret nameを指定します。
    secretmanager.png

  3. Configure rotationではDisable automatic rotationを指定します。

  4. 設定を確認して保存すると、新しいシークレットが追加されます。Secret ARNはIAMポリシー設定時に使いますので、控えておきます。

IAMロールの作成

AD参加するインスタンスに付与するIAMロールを作成します。
対象IAMロールにはAWS管理ポリシー×2、カスタマー管理ポリシー×1をアタッチしますので、先にカスタマー管理ポリシーを作成しておきます。
手順は省略しますが、ポリシー名をSM-Secret-Linux-DJ-<ディレクトリid>-Readとし、以下のポリシードキュメントで作成しました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret"
            ],
            "Resource": [
                "<作成したSecretのARN>"
            ]
        }
    ]
}

続いてIAMロールはSelect type of trusted entityEC2を選択し、ポリシーの選択で下記3つの管理ポリシーにチェックを入れます。

  • AmazonSSMManagedInstanceCore
  • AmazonSSMDirectoryServiceAccess
  • SM-Secret-Linux-DJ-<ディレクトリid>-Read ※先程作成したカスタマー管理ポリシー

ロール名はLinuxEC2DomainJoinとし、IAMロールを作成します。

Linux EC2インスタンスをADに参加させる

ここまででLinux EC2インスタンスを新規起動時にAD参加させるための準備が整いました!
インスタンスを起動し、AD参加できていることを実際に確認してみます。

  • EC2コンソールからLaunch Instancesをクリックします。
  • Step 1: Choose an Amazon Machine Image (AMI)では、起動するLinuxインスタンスAMIをします。今回はCommunity AMIsからRHEL7.9を選択しました。
  • Step 2: Choose an Instance Typeで任意のインスタンスタイプを選択します。
  • Step 3: Configure Instance Detailsはポイントとなるステップです。VPCなどは各環境に合わせて指定しますが、本ステップでは参加するAD、IAMロール、およびSSM AgentをインストールするためのUserDataを指定します。
    • Domain join directory: 作成済みのAWS Managed Microsoft AD Standardドメイン
    • IAM role: LinuxEC2DomainJoin
    • User data: 以下のスクリプトを指定
#!/bin/bash -xe
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
yum install -y https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/linux_amd64/amazon-ssm-agent.rpm
systemctl enable amazon-ssm-agent
systemctl start amazon-ssm-agent
systemctl status amazon-ssm-agent
  • Step 4〜6については環境に合わせて設定します。
  • Step 7: Review Instance Launchで設定内容を確認し、Launchをクリックします。

新規Linux EC2インスタンスの起動が開始されました。
ここで再度WindowsServerにログインし、ADのコンピュータアカウントを確認してみます。

起動前は既にAD参加済みのWindowsのみ表示されていました。
ad02.png

Linux EC2インスタンスの起動完了後、画面を更新すると、コンピュータアカウントが追加されています。
ad03.png

ドメインユーザーでLinux EC2インスタンスにSSHログインできるか確認してみると、
ssh.png
無事ログインできました!

まとめ

Linux EC2インスタンス起動時にシームレスにAD参加する方法を検証しました。
以前は手動でコマンド実行していた関係でドメイン参加が漏れていた、なんてこともありましたが
起動時に自動で参加してくれるのであれば作業漏れありませんね。
これでEC2 AutoScaling時にも活用できそうです。

(2020/11/19追記)
AutoScalingグループで指定するLaunch Templatesでは、参加するドメインの指定ができなさそう。。なので結局はUserDataでゴリゴリやるしかないかなぁ。。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

CycloneVSoCにOpenCVを組み込んでUSBカメラの映像をLinux Desktopに表示する

CycloneVSoCにOpenCVを組み込んでUSBカメラの映像をLinux Desktopに表示する

はじめに

Cyclone V SoCをつかった基板でAIの開発をする際、カメラ映像の取り込みはベースとなるので、自分への忘却録としても手順を記載したいと思います。

開発環境(Linux)

  • クロスコンパイル環境: VirtualBox グラフィカルユーザーインターフェースバージョン 6.1.14 r140239 (Qt5.6.2)
  • ゲストOS:Ubuntu18.04lts
  • FPGAコンパイル環境:Quartus Prime Version 18.1.1 build 646

Linux Desktopの構築

こちらのサイトの7.6.2項までを参考に、Cyclone V SoCにLinux Desktopのインストールをします。
https://rocketboards.org/foswiki/Projects/OpenVINOForSoCFPGA

手順は上記サイトを参考に、下記の変更を加えています。

  • ツールチェーン:gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz
  • Linuxカーネル: socfpga-5.4.45-lts
  • rootfs:linaro-stretch-developer-20170706-43.tar.gz

OpenCVのインストール

下記公式サイトを参考にインストールを進めていきます。
https://docs.opencv.org/4.4.0/d7/d9f/tutorial_linux_install.html

ツールのインストール

$ sudo apt-get install build-essential
$ sudo sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
$ sudo apt-get install python-dev python-numpy libtbb2 libtbb5-dev libjpeg-dev libpng-dev libtiff-dev  libdc1394-22-dev

公式には、libtbb-devが指定してありましたが、パッケージが見つからなかったので代わりにlibtbb5-devを、libjasper-devは見つからなかったので省略します。

GitからOpenCVをチェックアウト

$ git clone https://github.com/opencv/opencv.git
$ git clone https://github.com/opencv/opencv_contrib.git

OpenCVのビルド

$ cd ~/opencv
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
$ make -j2

OpenCVのインストール

$ sudo make install

正常にインストールされているか確認します。Pythonのインタラクティブコンソールを使えば確認できると思います。

$ Python3
>>> import cv2
>>>

エラーが出ずにプロンプト>>>が返ってくれば正常にインストールされていると思います。

Pythonプログラム

previe.py
#!/usr/bin/env python3

import cv2

cap = cv2.VideoCapture(0)

while(True):
    ret, frame = cap.read()
    if not ret:
        break
    cv2.imshow(`preview`, frame)
    key = cv2.waitKey(1)
    if key == 27:  # ESC 
        break

cap.release()
cv2.destroyAllWindows()

実行

下記でプログラムを実行すれば、カメラの映像がWindowに表示されます。

$ python3 previe.py
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む