月別アーカイブ: 2022年2月

FAT32のUSBをUbuntuへマウントしてoutlookのメール(*msg)を解析する

必要なツールをインストール
$ sudo apt install mpack
$ sudo apt install libemail-outlook-message-perl libemail-sender-perl

/dev/sdb1 がFAT32のUSBで、/mnt/tmpへマウント
mount -t vfat -o defaults,utf8 /dev/sdb1 /mnt/tmp

msgファイルをemlへ変換
$ msgconvert *.msg

*emlファイルが生成されるので、emlファイルを解析
$ munpack *eml

raspberry piでマルチブートを試してみる

raspberryPiで利用できるマルチブートの環境として、PINN(PINN IsNotNoobs)Berrybootなどが知られている。

PINNでカスタムOSを利用する手順のリンク

結構煩雑な手順を踏む必要がある。

https://github.com/procount/pinn/wiki/How-to-Create-a-Multi-Boot-SD-card-out-of-2-existing-OSes-using-PINN

PINN用のカスタムOS設定に必要なファイル

https://sourceforge.net/projects/pinn/files/

BerryBoot用に設定されたOSイメージのダウンロードリンク

https://sourceforge.net/projects/berryboot/files/

PINNよりも公開されているカスタムOSの種類が多く、さらに導入手順も比較的容易。実際に試してみたところ、swapをONにする設定ができない模様。

その後の調査でBerryBootのファイルシステムはoverlayとなっていてることがswapを設定できない原因らしい。最近のRaspberry OSでは、swapの設定を/sbin/dphys-swapfileのスクリプトで実行しているが、こんな記事を発見。
[Solved] With overlay of root, swap does not work

解決方法として:

〇dphys-swapfileを利用しない。

〇swapとしてファイルではなく、(overlayとは別の?)デバイスを指定する必要があると理解。

次のように、SSDのパーティションにswap用に4GBを割り当ててみました。

evice     Boot    Start       End   Sectors   Size Id Type
/dev/sda1           2048    262143    260096   127M  e W95 FAT16 (LBA)
/dev/sda2       47955968 468860927 420904960 200.7G 83 Linux
/dev/sda3       39567360  47955967   8388608     4G 82 Linux swap / Solaris

swapファイルの指定は、昔ながらの(?)/etc/fstabに記述します。

/dev/sda3       swap swap defaults 0 0

その結果、4GBのswap領域を確保することができた。

$ free
              total        used        free      shared  buff/cache   available
Mem:        3798908      307284      579676       47612     2911948     3366744
Swap:       4194300           0     4194300

BerryBootでインストールした複数のOS毎に、以上のようにswap設定を変更することで、目的を達成!

ASI ZWOカメラをpythonで利用する

最初にASI_linux_mac_SDK_V1.21をインストール

ダウンロードのリンク 

Software and Drivers

ダウンロードして展開すると;

$ls ASI_linux_mac_SDK_V1.21
demo  doc  include  lib  license.txt
$ls ASI_linux_mac_SDK_V1.21/demo
Makefile  bin  main_SDK2_snap.cpp  main_SDK2_video.cpp  main_SDK2_video_mac  main_SDK2_video_mac.cpp  readme.txt

$cat readme.txt
Please install opencv2 at first, for example under Linux x86 OS, run:
make platform=x86
Below options is supported:
x86(Linux 32-bit)
x64(Linux 64-bit)
armv5
armv6
armv7
armv8
mac32
mac64
mac(32-bit and 64-bit)

If libASICamera2.so or (.dylib) can't be found at run time, resolve by delow two ways:
1.Add a .conf file that contains the path of the library to /etc/ld.so.conf.d/, run ldconfig.
2.Add compile option -Wl,-rpath=<library path>

raspberry pi4 64bit OSの場合 armv8

makeに先立って、demo/binの下へarmv8フォルダーを作る。

/usr/includeの下に、opencv2のファイル一式が必要。

root権限なしでカメラをアクセスできるようにするためのルールを追加

設定ファイル ASI_linux_mac_SDK_V1.21lib/asi.rulesをlib/udev/rules.d または/etc/udev/rules.dへCopyして、カメラを抜き差し。

$cd demo
$mkdir demo/bin/armv8
$make platform=armv8

$ ls demo/bin/armv8/
libASICamera2.so  main_SDK2_video_mac  test_gui2_snap  test_gui2_video

libASICamera2.so を参照できるよう、適切なフォルダーへ配置しldconfig

(あまり良い方法ではないが、/lib の下へlibASICamera2.soをCopy)

Pythonから利用できるようにライブラーをインストール

https://github.com/python-zwoasi/python-zwoasi

#!/usr/bin/env python

import argparse
import os
import sys
import time
import zwoasi as asi

env_filename = os.getenv('ZWO_ASI_LIB')

ZWO_ASI_LIBには、次のパスを設定

$ echo $ZWO_ASI_LIB
/home/pi/python-zwoasi/build/lib/zwoasi

$ ls /home/pi/python-zwoasi/build/lib/zwoasi

__init__.py の内容

"""Interface to ZWO ASI range of USB cameras.

Calls to the `zwoasi` module may raise :class:`TypeError` or :class:`ValueError` exceptions if an input argument
is incorrect. Failure conditions from within the module may raise exceptions of type :class:`ZWO_Error`. Errors from
conditions specifically from the SDK C library are indicated by errors of type :class:`ZWO_IOError`; certain
:func:`Camera.capture()` errors are signalled by :class:`ZWO_CaptureError`."""

import ctypes as c
from ctypes.util import find_library
import logging
import numpy as np
import os
import six
import sys
import time
import traceback


__author__ = 'Steve Marple'
__version__ = '0.1.0.1'
__license__ = 'MIT'


def get_num_cameras():
    """Retrieves the number of ZWO ASI cameras that are connected. Type :class:`int`."""
    return zwolib.ASIGetNumOfConnectedCameras()