Translate

ラベル Python の投稿を表示しています。 すべての投稿を表示
ラベル Python の投稿を表示しています。 すべての投稿を表示

2022年12月29日木曜日

 国土地理院 基盤地図情報数値標高モデルをGeoJSON化する

国土地理院は、日本のすべての測量の基礎となる基本測量を行う国交省の特別機関です。
国土地理院ではいろんなデータを公開しているのですが、そのなかでも地図作成の基本となるデータ「基盤地図情報」がダウンロード可能になっています。




Google MapやYahoo地図だけでなくOpenStreetMapなどXYZタイルをWeb APIで取得できるようになっているので、正直地図をイチから作成することはあまりなかったことですが、近年の機械学習のヒットで地図情報も入力データとして扱うようになってきました。

ただ基盤地図情報からダウンロードできるデータは、GML、XML、Shape、ASCIIといった形式で、TensorFlow/PyTorchの入力データ化するには、事前の処理としてのパースがどうしても必要になります。

基盤地図情報は以下の3つの種類にわかれています。

  • 基本項目
  • 数値標高モデル
  • ジオイド・モデル


このうち、一番利用されるのが基本項目。道路や鉄道、海取り口の境界線、建物などがGML形式になっています。ダウンロードできるファイルの種類が多く、それぞれの種類で比空間データの属性がことなるため厄介です。



 

ただ、Python geopandasにあるread_file()を使えば簡単にGeoDataFrame化できるので、パースは簡単です。


 


ジオイド・モデルはXMLかASCIIかのどちらかで、どちらも独自のパースが必要ですが、ASCII形式のデータが固定長なので、比較的実装はしやすいので、こちらも問題ないとおもいます。



 

ただ、ジオイド・モデルの特性上、GPSの生データの標高補正か球体にテクスチャを貼り付けて地球の球面を表示する場合くらいにしか使い道がないので、必要になればその時実装すればいいだけだとおもいます。


 


数値標高モデルは、いわゆるDEM: Digital Elevation Model というやつで、日本の国土の地面の標高(m)を5m/10mメッシュ単位にまとめたもので、XML形式でダウンロードできます。
この数値標高モデルのXMLはGMLベースですが、標高が格納されている要素内に直列でならんでいたり、ほかの要素や属性値を使わないときちんとデータとして使用できないので、しっかり仕様を読み込んでパース処理を実装しなくてはなりません。


 


そこで、DEM(XMLファイル)を読み込み、GeoJSON化して出力する変換プログラムを作成しました。

以下のGitHubリポジトリにおいてあるコードをおきました。



まず実行環境を作成します。

conda create -n geo python numpy geopandas
conda activate geo


リポジトリのクローンします。

cd hogehoge
git clone https://github.com/coolerking/basemap
cd basemap/dem



download ファイルを作成し、基盤地図情報ダウンロードサイトから取ってきた数値標高モデルを取得、展開して対象のXMLをここに格納します。

mkdir download
# XMLファイルをdownloadディレクトリに格納する


models.py を実行します。omit_no_dataオプションをつけると、-9999.0のデータをすべて削除します。

python models.py --omit_no_data


作成されたGeoJSONはoutputディレクトリに格納されます。

GeoJSONを確認したい場合は下図のように QGIS などの統合GISソフトウェアで読み込ませるか、GeoPandasのGeoDataFrame化してから、plot()すれば表示できます。


 

 

p.s.

国土地理院基盤地図情報については国土地理院サイトもしくは、以下のスライドを参考にしてみてください。

 

複数の入手元から複数GISデータを統合してデータ分析する場合、測地座標系をあわせるという作業がとても厄介です。基盤地図情報はJGD2011v2.1(本記事執筆時点)ですが、GPSの測地系であるWGS84とは完全に一致しません。地図の世界では表示する縮尺によりこの精度を無視することがありますが、データ分析でどうするかはどのくらい誤差があるか、そもそもWGS84とはなにでJGD2011とはどうちがうのか、がわからないと正確に扱うことはできません。

まあ30年くらい前の車載GPSのように海岸線を走っているのに画面では海の上にいることになっていたりするかもですが、そのあたりどう"目をつぶるか"がGISデータの取り回しする人間の裁量になってくるのでしょう。 

2022年4月26日火曜日

Raspberry Pi4B上でPyAudioを使っていたら、途中 OSError [Errorno -9981] で落ちる

 Raspberry Pi4B にUSBマイクを刺し、

マイク入力をPython で扱いたくて PyAudio で以下のようなコードを記述した。

 

import pyaudio

# PyAudio インスタンス化
audio = pyaudio.PyAudio()

# 引数情報に従って、PyAudio ストリーム生成・開始
stream = audio.open(
format=pyaudio.paInt16, # 振幅:ビット解像度
rate = 44100, # サンプリング周波数
channels = 1, # モノラル
input_device_index = 1, #USBインデックス1にUSBマイク
input = True, # マイク入力
frames_per_buffer=4096) # チャンクサイズ:1フレーム4096バイト
stream.start_stream()

# 指定秒数の音声をchunkサイズごとに取得し、配列framesへ追加
for _ in range(0, 3600): # 6分間読み込み
# チャンクサイズ分読み込み
buf = stream.read(4096)
:

:

# クローズ
stream.stop_stream()
stream.close()
audio.terminate()  


Windows10 上で実行すると問題なく動作するのだけど、

Raspberry Pi4B(8GBmem/bullseye64bit)で動かすと、

buf = stream.read(4096) の行で

OSError: [Errorno -9981] Input overflowed

というエラーで止まってしまった。

発生する箇所は、毎回違うが4分以降5分半くらいでだいたい止まってしまう..

 

エラーの内容が Input overflowed となっており、例外が出ているので

overflow時に例外を発生させないように

buf = stream.read(4096, exception_on_overflow=False)

として実行したら発生しなくなった。


p.s.

あとで調べたら、StackOverflowにも同じ内容が出てました。

2021年12月9日木曜日

富岳上に tkinter が使用可能な TensorFlow 2.2.0 をインストールする方法

 2021/12/09 時点における富岳環境では、TensorFlow 2.2.0 が使用可能であるが、有効にした場合の Python は tkinterが使用できない。

富岳上で動作する TensorFlow 2.2.0 のソースコードは、以下のリポジトリにて管理されている TensorFlow ブランチとして公開されている。
 


上記サイトのWikiに、日本語のセットアップ手順つきで提供されている。
この手順通りに実行することで、 tkinter が無効な TensorFlow 2.2.0 実行環境をホームディレクトリ上に構築することができる。

注意

上記サイトをそのまま実行する場合、以下の項目に注意すること。

  • 必ず富岳計算ノード上で実行する
  • 会話ジョブで実行する場合、オプションなしスクリプト実行は、各スクリプトごとに会話ジョブを終了・立ち上げる(実行に時間がかかるのでタイムアウトで失敗しないように)
  • 失敗したら、使ったリポジトリは削除して、git checkoutからやりなおす
  • 全スクリプトを download オプション付きで実行しておく(これもタイムアウト対策)
  • spack は使わない(ガイドどおりにセットアップしても現時点で動作しない、富岳は環境が頻繁に変わるしサポートも弱い)

そこでこの記事では、上記サイト上のスクリプトを利用して tkinter が有効な Python 管理下での TensorFlow 2.2.0 実行環境を構築する手段を紹介する。
 

注意
本リポジトリは、2021/12/09 時点の富岳環境での動作を確認している。
富岳は、随時かつ頻繁に環境更新がおこなわれているため、本リポジトリの情報がすでに使用できない可能性がある。使用の際は、各自の責任にて判断のこと。

インストール手順

  • 計算ノードへログイン
  • 以下のコマンドを実行

  cd ${HOME}
  mkdir projects
  cd projects
  git clone https://github.com/coolerking/fugaku_sample
  cd fugaku_sample
  git checkout master
  cd tensorflow

  • env.src_fugakuを確認する。env.src は、デフォルトの設定から以下の環境変数を変更している。必要に応じて値を変更する。 
    • PREFIX : バイナリおよびライブラリの配置先ディレクトリ 
    • TCSDS_PATH : 富士通コンパイラのベースディレクトリ(定期的にバージョンが更新される) 
    • VENV_NAME : Python venv環境の配置先ディレクトリ

    PREFIX=${HOME}/.local/aarch64
    TCSDS_PATH=/opt/FJSVxtclanga/tcsds-1.2.33
    VENV_PATH=${HOME}/.local/aarch64/venv/tensorflow

  • 01_tensorflow.sh を確認する。有効なメールアドレスへの書き換えを行う。

  #PJM --mail-list "hogehoge@fugafuga.slack.com"
 

  • 以下のコマンド実行

  chmod +x 01_tensorflow
  pjsub 01_tensorflow.sh

注意

試行時は、ジョブ開始から完了まで7時間半ほどかかった。


TensorFlow 2.2.0 の利用


以下のコマンドを計算ノード上で実行し、venv環境 tensorflow を有効化する。

source ${HOME}/.local/aarch64/venv/tensorflow/bin/activate
動作を確認したい場合は、計算ノード上で以下のコマンドを実行する。
python -c "import tkinter"
python -c "import tensorflow"

備考

  • インストールされる tcl/tk は、富士通コンパイラではなく、gccコンパイラによりビルドされている(Python/TensorFlowは富士通コンパイラでビルドされる)
  • ビルドされるTensorFlowはGPUは使用できない(計算ノードにはGPUが搭載されていない)かわりにoneDNNを使用したCPU高速化が行われている
  • 上記手順を実行するとPython上でMPI相当の実装が可能になる horovod パッケージもあわせて構築される
  • TensorFlow 2.2.0 には、mesh-tensorflow が未実装のバージョンのため使用できない

参考

2020年2月27日木曜日

Raspberry Pi 4B(Raspbean buster lite) へ pyrealsense2 をインストールする

DonkeycarでIntel RealSense T265 トラッキングカメラを使おうと思ったのだけど、ドキュメントにUSB3.0推奨とある記述をみつけだ。

どうもUSB2.0でも動作するのだけど、イメージストリームを使う場合などは3.0のほうが良いのだろう。白黒の800X848イメージ2個を200MHzで送信するくらい2.0でもできそうだとは思うのだけど..

で Donkeycar のベースコンピュータは Raspberry Pi 3B+ を使うのが一般的なのだけど、librealsenseのGitHub Issueに4Bサポートしましたとの記述も発見した。

ただ..4BはRaspbean Liteイメージをstreachではなくbusterを使うように書かれている。ということで、busterでlibrealsenseとpython3ベースのpyrealsense2(librealsenseのpythonラッパ、Donkeycar上のT265用パーツクラスが使用している)をインストールしてみた。

以下、その手順(参照の際はAT YOUR OWN RISKでお願いします)。



  • 最新版のRaspbean Lite buster をSDカードへ書き込む
  • SDカードに対してSSH有効・WiFiを設定し、Raspberry Pi4Bへ刺して起動
  • sudo vi /etc/dphys-swapfile を実行しCONF_SWAPSIZE=2048と書き換え保存
  • sudo /etc/init.d/dphys-swapfile restart swapon -s
  • sudo raspi-config を実行
  • "7.Advanced Options" > "A7 GL Driver" > "Y" > "G2 GL (Fake KMS)" を選択
  • "7.Advanced Options" > "A1 Expand Filesystem"
  • 終了時rebootを選択し、リブート実行
  • sudo apt update && sudo apt upgrade -y
  • sudo apt install -y libdrm-amdgpu1 libdrm-dev libdrm-exynos1 libdrm-freedreno1 libdrm-nouveau2 libdrm-omap1 libdrm-radeon1 libdrm-tegra0 libdrm2 libglu1-mesa libglu1-mesa-dev glusterfs-common libglu1-mesa libglu1-mesa-dev libglui-dev libglui2c2 mesa-utils mesa-utils-extra xorg-dev libgtk-3-dev libusb-1.0-0-dev cmake libprotobuf-dev libtbb-dev build-essential i2c-tools avahi-utils joystick libopenjp2-7-dev libtiff5-dev gfortran libatlas-base-dev libopenblas-dev libhdf5-serial-dev git ntp libilmbase-dev libopenexr-dev libgstreamer1.0-dev libjasper-dev libwebp-dev libatlas-base-dev libavcodec-dev libavformat-dev libswscale-dev libqtgui4 libqt4-test
  • (python3 を使う場合) sudo apt install -y python3 python3-dev python3-opencv python3-pip python3-protobuf python3-opengl python3-virtualenv python3-numpy python3-picamera python3-pandas python3-rpi.gpio
  • sudo -H pip3 install pyopengl
  • sudo -H pip3 install pyopengl_accelerate
  • cd ~/ && mkdir -p projects && cd projects
  • git clone https://github.com/IntelRealSense/librealsense.git
  • cd librealsense
  • sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/
  • sudo udevadm control --reload-rules && sudo udevadm trigger
  • sudo reboot
  • vi ~/.bashrc を実行し以下の2行を末尾に追加、保存する
  • export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
  • export PYTHONPATH=$PYTHONPATH:/usr/local/lib
  • source ~/.bashrc
  • cd ~/projects/librealsense
  • mkdir build && cd build
  • (python3を使う場合) cmake .. -DBUILD_EXAMPLES=bool:true -DCMAKE_BUILD_TYPE=Release -DFORCE_LIBUVC=bool:true -DBUILD_PYTHON_BINDINGS=bool:true -DPYTHON_EXECUTABLE=$(which python3)
  • make -j4
  • sudo make install
  • sudo ldconfig


librealsense2 の Radspberry Pi 3へのインストールドキュメントをそのまま実行するとインストールできない。(執筆時点で)以下の点に注意が必要である。

  • busterパッケージリポジトリにはデバッガオプション付きライブラリ(末尾-dbg)がない
  • udevadm trigger は sudo をつけて実行(リブートすれば大丈夫?)
  • cmake、TBB、protobuf、OpenCV はbusterパッケージリポジトリのものを使っても動作する
  • make は時間がかかるので一度にpythonラッパpyrealsense2のインストールまで一気に行う

あと私の場合は make -j4 でも大丈夫だった。落ちた場合は、make cleanしてやりなおしになる。3B+よりは早いが時間がむちゃくちゃかかる。



次にT265の動作確認をするのだけど、realsense-viewerが使えない(liteを使ってるのでそもそもXサーバが別途必要になる、あればDISPLAY環境変数を設定すれば動くはず)。なので、pythonのサンプルコード t265_example.py で行う。


  • lsusb ※接続前の状態を確認(接続後との比較用)
  • dmesg |grep -i usb ※接続前の状態を確認(接続後との比較用)
  • Raspberry Pi 4B の青い USB3.0 コネクタにT265を接続し、電源を接続して起動
  • lsusb
※私の環境の場合、接続後以下のメッセージが追加
Bus 001 Device 003: ID 03e7:21XX Intel Myriad VPU [Movidius Neural Compute Stick]
  • dmesg |grep -i usb
※私の環境の場合、接続後以下のメッセージが追加
[  133.058275] usb 1-1.2: new high-speed USB device number 3 using xhci_hcd
[  133.189229] usb 1-1.2: New USB device found, idVendor=03e7, idProduct=21XXX, bcdDevice= 0.01
[  133.189245] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  133.189258] usb 1-1.2: Product: Movidius MA2X5X
[  133.189271] usb 1-1.2: Manufacturer: Movidius Ltd.
[  133.189283] usb 1-1.2: SerialNumber: 03e72XXX
  • cd ~/projects/librealsense/wrapper/python/example
  • python3 t265_example.py を実行しエラーがないことを確認


上記手順では/usr/bin/python3を使用している。Donkeycar用python3のvirtualenv環境は上記手順の後に作成すれば、再度env環境上でpyrealsense2をインストールしなくても使用可能になる。donkeycar及び関連パッケージとTensorFlowはenv環境下でインストールされるので、deactivateすればインストール前の状態の環境に戻ることができる。


  • cd ~/
  • python3 -m virtualenv -p python3 env --system-site-packages
  • echo "source ~/env/bin/activate" >> ~/.bashrc
  • source ~/.bashrc
  • cd ~/projects
  • git clone https://github.com/autorope/donkeycar
  • cd donkeycar
  • git checkout master
  • git pull
  • pip install -e .[pi]
  • pip install tensorflow==1.14.0
  • sudo shutdown -h now

この記事執筆時点ではまだPyPIに登録されていなかった。ので上記手順ではlibrealsenseからソースコードビルドしている。
PyPI登録されているかもしれないので pip3 search pyrealsense2 して確認のこと。



ちなみに4BをUSBハブ経由で動かすと電力不足のメッセージが頻出した。PC直付けにしたらエラーが無くなったので、4Bって結構電源にシビアなのかもしれない..

..これまでRaspberry Pi3B+環境でつかっていたモバイルバッテリが、4B&T265の電力消費に対応できるか..だけど、これは実際に繋いで試してみるしか無いか..


2020年2月17日月曜日

Jetson Nano 上で RealSense T265 用 Donkeycar パーツを試す

Donekycar (v3.1.1マスタブランチ)コードには
RealSense T265用パーツクラス
(donkeycar.parts.realsense2.pyのRS_T265という名前のクラス)
がすでに用意されている。

realsense2.py は、pythonパッケージ pyrealsense2 を先に導入しておかなくてはならない。

通常のUbuntuなら pip install pyrealsense2 でインストールするのだが、Jetson Nano用のJetpack (v43)アーキテクチャ用whlモジュールがPyPIに登録されていないので、シェアードライブラリ含めてソースコードビルドを選択せざるを得ない。

Donkeycar環境を構築済みのJetson Nanoへ

GitHub: IntelRealSense/librealsense
https://github.com/IntelRealSense/librealsense

上記のリポジトリからソースコードビルドした。
#ビルド方法の概要は前記事のps以下を参照のこと

python -c "import pyrealsense2" を実行してエラーが出なければ、python ラッパパッケージ pyrealsense2 のインストールが成功しているかがわかる。

また、librealsense/wrapper/python/examplesにある t265_example.py を実行(JetsonにUSBケーブル経由でT265をつないで起動し、python t265_example.pyを実行)することで、実際に値が取れているかどうか疎通確認テストができる。

以下のコードは、Veichleフレームワークを使ってRS_T265パーツを動かすサンプルである。

    import donkeycar as dk
    V = dk.vehicle.Vehicle()

    from donkeycar.parts.realsense2 import RS_T265
    rs = RS_T265(image_output=False)
    V.add(rs, outputs=['pos', 'vel', 'acc', 'image_array'], threaded=False)
    class PrintIMU:
        def run(self, pos, vel, acc):
            print('pos:({:.5g}, {:.5g}, {:.5g}) vel:({:.5g}, {:.5g}, {:.5g}) acc:({:.5g}, {:.5g}, {:.5g})'.format(
                pos.x, pos.y, pos.z, vel.x, vel.y, vel.z, acc.x, acc.y, acc.z))
    V.add(PrintIMU(), inputs=['pos', 'vel', 'acc'])

    V.start(rate_hz=20, max_loop_count=20 * 60)


RS_T265 を run すると6軸IMUデータ+位置座標(位置座標(X, Y, Z)、速度(X, Y, Z)、加速度(X, Y, Z))とイメージが取得できる。

ただし、RS_T265クラスのコンストラクタ引数に何も指定しない場合(デフォルトの場合)は、イメージ配列が出力されない(Noneで出力される)。

T265カメラの画像のイメージ配列を取得したい場合は、RS_T265(image_output=True)と指定するとnd.array形式の配列として出力される。

ただし、2つあるカメラの片方(多分..左側かな..)のみでかつnd.array形式のshapeが(800, 848)となる(白黒画像なので2次元配列)。

Donkeycar のカメラの代替として使用する場合は、myconfig.pyのIMAGE_H、IMAGE_W、IMAGE_DEPTHを書き換えるか、イメージ配列を加工して(120, 160, 3)にreshapeするパーツクラスを作成すれば良い。


なお pyrealsense2 パッケージを直接使うと、四元数(qw, qx, qy, qz)が取得できる。
詳細は librealsense/wrapper/python/examples/t265_rpy.py を参照のこと。


RS_T265クラスのコンストラクタのデフォルト引数がイメージを使用しない仕様から、おそらくカメラは既存のデバイスを使って、IMU(MPU6050)がわりにT265を使い、機械学習モデル'imu'で動かすことを想定して作成されたものと推測できる。

それならMPU6050のほうが安上がりだ。位置情報もSLAMを使うにはDonkeycarの機械学習モデル自体の入力層をいじらなくてはならないし..


..やはりROSで使うのが、一般的なのかな..
シェアードライブラリのみ(Pythonラッパなし)や
ROS上で動作する T265モジュール(melodic)も
apt で入れられるし..

2019年11月14日木曜日

I2C 通信の smbus ベースのコードをpigpioに移植中にi2c_read_i2c_block_dataではまる

Python で MPU9250 を使おうとして、
以下のリポジトリを発見。

https://github.com/FaBoPlatform/FaBo9AXIS-MPU9250-Python

ただ、既存コードを pigpio ベースで行っているので、
Apache-2.0ライセンスでもあることから、
コードを書き換えてみようとためしてみた。

pigpioのi2c関連の関数は、
pigpio.pi()で取得したオブジェクトに
smbus とほとんど同じ名前で同じ機能があるので
ほいほいと書き換えていった..

引数のアドレスをpigpioハンドラにすれば
ほとんど変更いらずだわ..

..と、思っていたのだけど..

smbusの

read_i2c_block_data(addr, cmd)

の戻り値が

long[]

になっているのに対し、

pigpio の

i2c_read_i2c_block_data(handle, reg, count)

の戻り値は

Tupple。

1要素目が0以上が正常読み込みしたことをあらわし、
負値の場合はエラーコードになる。

そして2要素目が取得した値なのだけど..
これがbytearrayになってる..


..めんどくさー



おきをつけあれ。


ちなみに..私は以下のラップ関数で逃げました。

ご参考まで。

def read_i2c_block_data(pi, handler, reg, count):
    """
    SMBusのread_i2c_block_dataと戻り値を合わせるための関数。
    引数:
        handler     pigpio I2C ハンドラ
        reg         デバイスレジスタ
        count       読み込むバイト数
    戻り値:
        int[]       read_i2c_block_dataの戻り値はlong[]だがpython3
                    なのでint[]
    例外:
        ConnectionError エラーの場合
    """
    if pi is None:
        try:
            import pigpio
        except:
            raise
        pi = pigpio.pi()
    (b, d) = pi.i2c_read_i2c_block_data(handler, reg, count)
    if b >= 0:
        data = []
        for i in range(count):
            value = int(d[i])
            data.append(value)
        return data
    else:
        raise ConnectionError('Error:{} in i2c_read_i2c_block_data'.format(
            str(b)))


誤りがあれば、コメント欄にご指摘ください。

2019年7月31日水曜日

pip install時にERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE.というエラーが発生する

pip install時にERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE.というエラーが発生する

Raspberry Pi上で以下のようにtensorflowをpip install しようとしたら、

(env) pi@nakano:/dev/input $ pip install tensorflow
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting tensorflow
  Downloading https://www.piwheels.org/simple/tensorflow/tensorflow-1.13.1-cp37-none-linux_armv6l.whl (87.1MB)
     |??????                          | 13.9MB 36kB/s eta 0:33:37

ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.
    tensorflow from https://www.piwheels.org/simple/tensorflow/tensorflow-1.13.1-cp37-none-linux_armv6l.whl#sha256=25f4ff027beec1e568baf8e90a07bad59d354560533d6b37318b9efeb70beeb1:
        Expected sha256 25f4ff027beec1e568baf8e90a07bad59d354560533d6b37318b9efeb70beeb1
             Got        3ace76e2b0ded895a4e6239a4620a1f0aaa92ad8747d5660f6b34f17d5f4c688

というエラーが出てしまい先に進めない..

--no-chache-dirをつけて実行しても同様のエラーでとまる。

ダウンロードしようとしてフィンガープリントのハッシュが合わないようなので、以下のようにwgetしてwhlファイルをpip innstallしたら..何度かエラーを出すがそのままダウンロードすることができ、うまくいった。

env) pi@nakano:~/tmp $ wget https://www.piwheels.org/simple/tensorflow/tensorflow-1.13.1-cp37-none-linux_armv6l.whl
--2019-07-31 00:03:14--  https://www.piwheels.org/simple/tensorflow/tensorflow-1.13.1-cp37-none-linux_armv6l.whl
Resolving www.piwheels.org (www.piwheels.org)... 93.93.129.174, 46.235.225.189, 2a00:1098:0:82:1000:3b:1:1, ...
Connecting to www.piwheels.org (www.piwheels.org)|93.93.129.174|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 87138952 (83M)
Saving to: ‘tensorflow-1.13.1-cp37-none-linux_armv6l.whl’

tensorflow-1.13.1-c  16%[== >                  ]  13.39M  29.1KB/s    in 8m 16s

2019-07-31 00:11:35 (27.6 KB/s) - Read error at byte 14041088/87138952 (Error decoding the received TLS packet.). Retrying.

--2019-07-31 00:11:36--  (try: 2)  https://www.piwheels.org/simple/tensorflow/tensorflow-1.13.1-cp37-none-linux_armv6l.whl
Connecting to www.piwheels.org (www.piwheels.org)|93.93.129.174|:443... connected.
HTTP request sent, awaiting response... 206 Partial Content
Length: 87138952 (83M), 73097864 (70M) remaining
Saving to: ‘tensorflow-1.13.1-cp37-none-linux_armv6l.whl’

tensorflow-1.13.1-c  34%[+++== >               ]  28.31M  27.8KB/s    in 9m 11s

2019-07-31 00:20:51 (27.7 KB/s) - Read error at byte 29687808/87138952 (Error decoding the received TLS packet.). Retrying.

--2019-07-31 00:20:53--  (try: 3)  https://www.piwheels.org/simple/tensorflow/tensorflow-1.13.1-cp37-none-linux_armv6l.whl
Connecting to www.piwheels.org (www.piwheels.org)|93.93.129.174|:443... connected.
HTTP request sent, awaiting response... 206 Partial Content
Length: 87138952 (83M), 57451144 (55M) remaining
Saving to: ‘tensorflow-1.13.1-cp37-none-linux_armv6l.whl’

tensorflow-1.13.1-c  51%[++++++=== >           ]  43.02M  30.3KB/s    in 8m 56s

2019-07-31 00:29:52 (28.1 KB/s) - Read error at byte 45105152/87138952 (Error decoding the received TLS packet.). Retrying.

--2019-07-31 00:29:55--  (try: 4)  https://www.piwheels.org/simple/tensorflow/tensorflow-1.13.1-cp37-none-linux_armv6l.whl
Connecting to www.piwheels.org (www.piwheels.org)|93.93.129.174|:443... connected.
HTTP request sent, awaiting response... 206 Partial Content
Length: 87138952 (83M), 42033800 (40M) remaining
Saving to: ‘tensorflow-1.13.1-cp37-none-linux_armv6l.whl’

tensorflow-1.13.1-c  68%[++++++++++== >        ]  56.80M  27.9KB/s    in 8m 22s

2019-07-31 00:38:21 (28.1 KB/s) - Read error at byte 59555840/87138952 (Error decoding the received TLS packet.). Retrying.

--2019-07-31 00:38:25--  (try: 5)  https://www.piwheels.org/simple/tensorflow/tensorflow-1.13.1-cp37-none-linux_armv6l.whl
Connecting to www.piwheels.org (www.piwheels.org)|93.93.129.174|:443... connected.
HTTP request sent, awaiting response... 206 Partial Content
Length: 87138952 (83M), 27583112 (26M) remaining
Saving to: ‘tensorflow-1.13.1-cp37-none-linux_armv6l.whl’

tensorflow-1.13.1-c  84%[+++++++++++++== >     ]  70.11M  27.2KB/s    in 8m 7s

2019-07-31 00:46:36 (28.0 KB/s) - Read error at byte 73515008/87138952 (Error decoding the received TLS packet.). Retrying.

--2019-07-31 00:46:41--  (try: 6)  https://www.piwheels.org/simple/tensorflow/tensorflow-1.13.1-cp37-none-linux_armv6l.whl
Connecting to www.piwheels.org (www.piwheels.org)|93.93.129.174|:443... connected.
HTTP request sent, awaiting response... 206 Partial Content
Length: 87138952 (83M), 13623944 (13M) remaining
Saving to: ‘tensorflow-1.13.1-cp37-none-linux_armv6l.whl’

tensorflow-1.13.1-c 100%[++++++++++++++++=== > ]  83.10M  28.1KB/s    in 7m 56s

2019-07-31 00:54:39 (28.0 KB/s) - ‘tensorflow-1.13.1-cp37-none-linux_armv6l.whl’ saved [87138952/87138952]

(env) pi@nakano:~/tmp $ ls
tensorflow-1.13.1-cp37-none-linux_armv6l.whl
(env) pi@nakano:~/tmp $ pip install tensorflow-1.13.1-cp37-none-linux_armv6l.whl
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Processing ./tensorflow-1.13.1-cp37-none-linux_armv6l.whl
Collecting termcolor > =1.1.0 (from tensorflow==1.13.1)
  Downloading https://www.piwheels.org/simple/termcolor/termcolor-1.1.0-py3-none-any.whl
Collecting absl-py > =0.7.0 (from tensorflow==1.13.1)
  Downloading https://www.piwheels.org/simple/absl-py/absl_py-0.7.1-py3-none-any.whl (117kB)
     |????????????????????????????????| 122kB 52kB/s
Collecting tensorflow-estimator < 1.15.0rc0, > =1.14.0rc0 (from tensorflow==1.13.1)
  Downloading https://files.pythonhosted.org/packages/3c/d5/21860a5b11caf0678fbc8319341b0ae21a07156911132e0e71bffed0510d/tensorflow_estimator-1.14.0-py2.py3-none-any.whl (488kB)
     |????????????????????????????????| 491kB 21kB/s
Collecting astor > =0.6.0 (from tensorflow==1.13.1)
  Downloading https://files.pythonhosted.org/packages/d1/4f/950dfae467b384fc96bc6469de25d832534f6b4441033c39f914efd13418/astor-0.8.0-py2.py3-none-any.whl
Collecting google-pasta > =0.1.6 (from tensorflow==1.13.1)
  Downloading https://files.pythonhosted.org/packages/d0/33/376510eb8d6246f3c30545f416b2263eee461e40940c2a4413c711bdf62d/google_pasta-0.1.7-py3-none-any.whl (52kB)
     |????????????????????????????????| 61kB 56kB/s
Collecting wrapt > =1.11.1 (from tensorflow==1.13.1)
  Downloading https://www.piwheels.org/simple/wrapt/wrapt-1.11.2-cp37-cp37m-linux_armv6l.whl (68kB)
     |????????????????????????????????| 71kB 51kB/s
Requirement already satisfied: six > =1.10.0 in /usr/lib/python3/dist-packages (from tensorflow==1.13.1) (1.12.0)
Requirement already satisfied: wheel > =0.26 in /home/pi/env/lib/python3.7/site-packages (from tensorflow==1.13.1) (0.33.4)
Requirement already satisfied: numpy < 2.0, > =1.14.5 in /usr/lib/python3/dist-packages (from tensorflow==1.13.1) (1.16.2)
Collecting keras-applications > =1.0.8 (from tensorflow==1.13.1)
  Downloading https://files.pythonhosted.org/packages/71/e3/19762fdfc62877ae9102edf6342d71b28fbfd9dea3d2f96a882ce099b03f/Keras_Applications-1.0.8-py3-none-any.whl (50kB)
     |????????????????????????????????| 51kB 30kB/s
Collecting tensorboard < 1.14.0, > =1.13.0 (from tensorflow==1.13.1)
  Downloading https://files.pythonhosted.org/packages/0f/39/bdd75b08a6fba41f098b6cb091b9e8c7a80e1b4d679a581a0ccd17b10373/tensorboard-1.13.1-py3-none-any.whl (3.2MB)
     |????????????????????????????????| 3.2MB 24kB/s
Collecting grpcio > =1.8.6 (from tensorflow==1.13.1)
  Downloading https://www.piwheels.org/simple/grpcio/grpcio-1.22.0-cp37-cp37m-linux_armv6l.whl (13.0MB)
     |???????????????????????????     | 10.7MB 27kB/s eta 0:01:25
Collecting keras-preprocessing > =1.0.5 (from tensorflow==1.13.1)
  Downloading https://files.pythonhosted.org/packages/28/6a/8c1f62c37212d9fc441a7e26736df51ce6f0e38455816445471f10da4f0a/Keras_Preprocessing-1.1.0-py2.py3-none-any.whl (41kB)
     |????????????????????????????????| 51kB 36kB/s
Collecting gast > =0.2.0 (from tensorflow==1.13.1)
  Downloading https://www.piwheels.org/simple/gast/gast-0.2.2-py3-none-any.whl
Collecting protobuf > =3.6.1 (from tensorflow==1.13.1)
  Downloading https://files.pythonhosted.org/packages/34/58/a8230dcd36e5db75c1084f4fc32b18cc217bb2806143597df625dc628a5d/protobuf-3.9.0-py2.py3-none-any.whl (432kB)
     |????????????????????????????????| 440kB 29kB/s
Requirement already satisfied: h5py in /home/pi/env/lib/python3.7/site-packages (from keras-applications > =1.0.8- > tensorflow==1.13.1) (2.9.0)
Collecting markdown > =2.6.8 (from tensorboard < 1.14.0, > =1.13.0- > tensorflow==1.13.1)
  Downloading https://files.pythonhosted.org/packages/c0/4e/fd492e91abdc2d2fcb70ef453064d980688762079397f779758e055f6575/Markdown-3.1.1-py2.py3-none-any.whl (87kB)
     |????????????????????????????????| 92kB 30kB/s
Collecting werkzeug > =0.11.15 (from tensorboard < 1.14.0, > =1.13.0- > tensorflow==1.13.1)
  Downloading https://files.pythonhosted.org/packages/d1/ab/d3bed6b92042622d24decc7aadc8877badf18aeca1571045840ad4956d3f/Werkzeug-0.15.5-py2.py3-none-any.whl (328kB)
     |????????????????????????????????| 337kB 26kB/s
Requirement already satisfied: setuptools in /home/pi/env/lib/python3.7/site-packages (from protobuf > =3.6.1- > tensorflow==1.13.1) (41.0.1)
ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.
    grpcio > =1.8.6 from https://www.piwheels.org/simple/grpcio/grpcio-1.22.0-cp37-cp37m-linux_armv6l.whl#sha256=6f92b984a746341529b8f82f7c6e101d36d70764f232505949828af7dca27e06 (from tensorflow==1.13.1):
        Expected sha256 6f92b984a746341529b8f82f7c6e101d36d70764f232505949828af7dca27e06
             Got        e3c32a594668a3aa59f190f0a768e11b81710d91b1fa9ae2918d414ba204f2b5


(env) pi@nakano:~/tmp $ wget https://www.piwheels.org/simple/grpcio/grpcio-1.22.0-cp37-cp37m-linux_armv6l.whl
--2019-07-31 01:09:05--  https://www.piwheels.org/simple/grpcio/grpcio-1.22.0-cp37-cp37m-linux_armv6l.whl
Resolving www.piwheels.org (www.piwheels.org)... 46.235.225.189, 93.93.129.174, 2a00:1098:0:80:1000:3b:1:1, ...
Connecting to www.piwheels.org (www.piwheels.org)|46.235.225.189|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 12990873 (12M)
Saving to: ‘grpcio-1.22.0-cp37-cp37m-linux_armv6l.whl’

grpcio-1.22.0-cp37-  69%[============ >        ]   8.56M  26.5KB/s    in 5m 9s

2019-07-31 01:14:19 (28.4 KB/s) - Read error at byte 8978432/12990873 (Error decoding the received TLS packet.). Retrying.

--2019-07-31 01:14:20--  (try: 2)  https://www.piwheels.org/simple/grpcio/grpcio-1.22.0-cp37-cp37m-linux_armv6l.whl
Connecting to www.piwheels.org (www.piwheels.org)|46.235.225.189|:443... connected.
HTTP request sent, awaiting response... 206 Partial Content
Length: 12990873 (12M), 4012441 (3.8M) remaining
Saving to: ‘grpcio-1.22.0-cp37-cp37m-linux_armv6l.whl’

grpcio-1.22.0-cp37- 100%[+++++++++++++====== > ]  12.39M  30.1KB/s    in 2m 20s

2019-07-31 01:16:42 (28.1 KB/s) - ‘grpcio-1.22.0-cp37-cp37m-linux_armv6l.whl’ saved [12990873/12990873]

(env) pi@nakano:~/tmp $ ls
grpcio-1.22.0-cp37-cp37m-linux_armv6l.whl
tensorflow-1.13.1-cp37-none-linux_armv6l.whl
(env) pi@nakano:~/tmp $ pip install grpcio-1.22.0-cp37-cp37m-linux_armv6l.whl
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Processing ./grpcio-1.22.0-cp37-cp37m-linux_armv6l.whl
Requirement already satisfied: six > =1.5.2 in /usr/lib/python3/dist-packages (from grpcio==1.22.0) (1.12.0)
Installing collected packages: grpcio
Successfully installed grpcio-1.22.0
(env) pi@nakano:~/tmp $ pip install tensorflow-1.13.1-cp37-none-linux_armv6l.whl
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Processing ./tensorflow-1.13.1-cp37-none-linux_armv6l.whl
Collecting keras-applications > =1.0.8 (from tensorflow==1.13.1)
  Using cached https://files.pythonhosted.org/packages/71/e3/19762fdfc62877ae9102edf6342d71b28fbfd9dea3d2f96a882ce099b03f/Keras_Applications-1.0.8-py3-none-any.whl
Requirement already satisfied: six > =1.10.0 in /usr/lib/python3/dist-packages (from tensorflow==1.13.1) (1.12.0)
Requirement already satisfied: numpy < 2.0, > =1.14.5 in /usr/lib/python3/dist-packages (from tensorflow==1.13.1) (1.16.2)
Collecting astor > =0.6.0 (from tensorflow==1.13.1)
  Using cached https://files.pythonhosted.org/packages/d1/4f/950dfae467b384fc96bc6469de25d832534f6b4441033c39f914efd13418/astor-0.8.0-py2.py3-none-any.whl
Collecting wrapt > =1.11.1 (from tensorflow==1.13.1)
  Using cached https://www.piwheels.org/simple/wrapt/wrapt-1.11.2-cp37-cp37m-linux_armv6l.whl
Collecting protobuf > =3.6.1 (from tensorflow==1.13.1)
  Using cached https://files.pythonhosted.org/packages/34/58/a8230dcd36e5db75c1084f4fc32b18cc217bb2806143597df625dc628a5d/protobuf-3.9.0-py2.py3-none-any.whl
Collecting gast > =0.2.0 (from tensorflow==1.13.1)
  Using cached https://www.piwheels.org/simple/gast/gast-0.2.2-py3-none-any.whl
Requirement already satisfied: grpcio > =1.8.6 in /home/pi/env/lib/python3.7/site-packages (from tensorflow==1.13.1) (1.22.0)
Collecting tensorflow-estimator < 1.15.0rc0, > =1.14.0rc0 (from tensorflow==1.13.1)
  Using cached https://files.pythonhosted.org/packages/3c/d5/21860a5b11caf0678fbc8319341b0ae21a07156911132e0e71bffed0510d/tensorflow_estimator-1.14.0-py2.py3-none-any.whl
Collecting tensorboard < 1.14.0, > =1.13.0 (from tensorflow==1.13.1)
  Using cached https://files.pythonhosted.org/packages/0f/39/bdd75b08a6fba41f098b6cb091b9e8c7a80e1b4d679a581a0ccd17b10373/tensorboard-1.13.1-py3-none-any.whl
Collecting termcolor > =1.1.0 (from tensorflow==1.13.1)
  Using cached https://www.piwheels.org/simple/termcolor/termcolor-1.1.0-py3-none-any.whl
Collecting absl-py > =0.7.0 (from tensorflow==1.13.1)
  WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))': /simple/absl-py/
  Using cached https://www.piwheels.org/simple/absl-py/absl_py-0.7.1-py3-none-any.whl
Collecting google-pasta > =0.1.6 (from tensorflow==1.13.1)
  Using cached https://files.pythonhosted.org/packages/d0/33/376510eb8d6246f3c30545f416b2263eee461e40940c2a4413c711bdf62d/google_pasta-0.1.7-py3-none-any.whl
Collecting keras-preprocessing > =1.0.5 (from tensorflow==1.13.1)
  Using cached https://files.pythonhosted.org/packages/28/6a/8c1f62c37212d9fc441a7e26736df51ce6f0e38455816445471f10da4f0a/Keras_Preprocessing-1.1.0-py2.py3-none-any.whl
Requirement already satisfied: wheel > =0.26 in /home/pi/env/lib/python3.7/site-packages (from tensorflow==1.13.1) (0.33.4)
Requirement already satisfied: h5py in /home/pi/env/lib/python3.7/site-packages (from keras-applications > =1.0.8- > tensorflow==1.13.1) (2.9.0)
Requirement already satisfied: setuptools in /home/pi/env/lib/python3.7/site-packages (from protobuf > =3.6.1- > tensorflow==1.13.1) (41.0.1)
Collecting markdown > =2.6.8 (from tensorboard < 1.14.0, > =1.13.0- > tensorflow==1.13.1)
  Using cached https://files.pythonhosted.org/packages/c0/4e/fd492e91abdc2d2fcb70ef453064d980688762079397f779758e055f6575/Markdown-3.1.1-py2.py3-none-any.whl
Collecting werkzeug > =0.11.15 (from tensorboard < 1.14.0, > =1.13.0- > tensorflow==1.13.1)
  Using cached https://files.pythonhosted.org/packages/d1/ab/d3bed6b92042622d24decc7aadc8877badf18aeca1571045840ad4956d3f/Werkzeug-0.15.5-py2.py3-none-any.whl
Installing collected packages: keras-applications, astor, wrapt, protobuf, gast, tensorflow-estimator, markdown, absl-py, werkzeug, tensorboard, termcolor, google-pasta, keras-preprocessing, tensorflow
Successfully installed absl-py-0.7.1 astor-0.8.0 gast-0.2.2 google-pasta-0.1.7 keras-applications-1.0.8 keras-preprocessing-1.1.0 markdown-3.1.1 protobuf-3.9.0 tensorboard-1.13.1 tensorflow-1.13.1 tensorflow-estimator-1.14.0 termcolor-1.1.0 werkzeug-0.15.5 wrapt-1.11.2
(env) pi@nakano:~/tmp $ pip list
:
:
tensorboard          1.13.1
tensorflow           1.13.1
tensorflow-estimator 1.14.0
:
:
(env) pi@nakano:~/tmp $

関連パッケージも同様のエラーがでたのでwgetしてpip installして再実行してやっとこさtensorflowをインストールできた。

Raspberry Pi上だったのでLinuxコマンドのwgetを使ったが、WindowsならWSLのwgetやcurlを使うか、ためしてないがブラウザでダウンロードしても多分動くはずだ。



..おかげで今月のギガ3GB全部使ってしまったよ..とほほ..

Google Colab相当の環境をローカルPC上のDocker Composeで実現する

 Docker Composeの有料版に、お金を払いたくない ^H^Hが使えない ため古いゲーミングPC(GeForce3080)にDocker Composeを入れてその上のコンテナでGoogle Colab相当のノート操作ができないかためしてみた: コンテナイメージとして a...