プログラミング Tips

ITエンジニアの雑記ブログ。
IT関連ニュースの考察や、プログラミングに関するTipsの備忘録として…
育児や日常の雑記帳としても、記事を投稿していきます。

プログラミングと日常生活に関する情報を発信しています。

カテゴリ: Python

Python で QRコードの画像を読み取るサンプル作ってみた!!

QRコードを撮影した結果をデコードするのは一般的…

でもQRコードの画像データをデコードできるのかな?と気になったので、その部分を調べてみた。



環境

  • MacOSX 10.13.3 (High Sierra)
  • Python 3.6.1
  • zbar
  • pyzbar
  • Pillow

準備

  1. virtualenv 環境構築
  2. zbarをインストール

$ brew install zbar

  1. Pythonパッケージのインストール

$ pip install pyzbar $ pip install pillow

実行

今回は下記QRコードの画像ファイル("Sample_QR.png")を用意して、コードを実行する同じ階層におく

from pyzbar.pyzbar import decode
from PIL import Image
import os

image = "Sample_QR.png"

data = decode(Image.open(image))

f = open('output.txt', 'a')
f.write(data[0][0].decode('utf-8', 'ignore'))
f.close()

結果

output.txtファイルが生成されて、その中に結果が出力されていれば成功
今回は https://www.google.co.jp/が出力されている



Python 3.xで 仮想環境"virtualenv"をサクッと作る方法をまとめてみた!!

Python3系から、virtualenvの仮想環境の生成がオプション(-m)を使って、簡単に構築できるようになった。
Python標準のモジュールで"venv"というパッケージ名で取り込まれているので、それを用いる

いつも方法を忘れちゃうので、備忘録のためにここにまとめておく



環境

  • MacOSX 10.13.3 (High Sierra)
  • Python 3.6.1

環境構築

1. 準備

ディレクトリ配下に環境(bin, include, lib など)が構築される

$ mkdir testdir
$ cd testdir
$ python3 -m venv .

2. 実行

Step1. で構築した仮想環境を実行するコマンド

$ source bin/activate

ターミナル上が下記に変わったら成功
以降は、仮想環境内で実行することができる

(testdir) $

3. 終了

Step2. で構築した仮想環境を終了するコマンド

(testdir) $ deactivate

ターミナル画面から、(testdir)の表示が消えたら終了

Pythonパッケージのインストール

virtualenv環境を立ち上げたら、必要なパッケージをpipでインストールする

  • インストール方法

    $ pip install "package"
  • インストールパッケージの確認

    $ pip freeze
  • インストールパッケージの 一括 エクスポート

    $ pip freeze > requirements.txt
  • インストールパッケージの 一括 インポート

    $ pip install -r requirements.txt


緯度経度情報を簡単に取得する方法 【Google mapsで確認】

2018年元旦の初日の出時間を詳細に確認する方法をまとめてきたが、ポイントが3つあった。

  1. 日の出時間の計算処理
  2. タイムゾーンの変換処理
  3. 緯度経度の算出処理

上の2つに関しては、前の投稿で解決済み!
今回は3つ目の緯度経度の算出処理についてまとめてみる。



地図からの緯度経度取得を考える

Google maps api, Yahoo developer apiなどを用いることで、住所情報から緯度経度の取得は可能。しかし今回に関しては、日の出をみたい場所に確実に住所が存在しているとも限らないし、最寄りの建物の住所を調べることも容易でない。よって、住所情報からAPIを用いての情報取得は見送り。

結論は、地図から緯度経度情報を取得する方法を選ぶ。

Google map からの情報取得

Google maps, Yahoo地図, Bingなど各種マップサービスは存在するが、今回は"Google maps"を利用することとする。もっとも簡単に操作〜情報取得ができるし、api利用に向けての予行演習になると考えたから。

1. Google map を開く

早速以下にアクセスして、マップを開く

Google map

2. 目的地点(日の出観察地点)へ移動

目的の場所、今回は日の出を観測する場所へ移動して、地図画面の中心に表示する

3. 緯度経度情報を取得

サイトのアドレスバーに注目!!
緯度経度情報は"get"形式表示される。これは地図情報を共有するための措置であると考えられる。

例えば…
静岡県焼津市の浜当目海岸に標準を合わせてみる

https://www.google.co.jp/maps/@34.8768478,138.3328569,18z

この場合、下記が含まれていることがわかる
緯度(lat):34.8768478
経度(lon):138.3328569

4. 取得した情報を計算式に入力して、日の出時間を計算

緯度経度情報が取得できたら、これを以前投稿した計算式に入力

計算については、ここを参考に…

まとめ

以上で、日本全国の任意の場所で日の出時間を取得できるようになった。
最後に、今回のまとめで使ったライブラリ

  • PyEphem
  • Pytz


Python でタイムゾーンを変換してみた 【pytzを使って…】

これまでの記事で、2018年元旦の初日の出を拝みに行くにあたって、正確な日の出時間を知りたかったが、現状ではGPS位置情報からサクッと正確な日の出時間の情報を得ることができなかった為、自分で計算する方法を調べてみたという話…

緯度経度情報と計算したい日付情報を指定すれば、UTC(世界標準時)ベースで出力する方法まではまとめることができた。

でもUTCのままだとやっぱりわかりにくい…折角なら日本標準時間で出力したい!!っtことで、UTCを日本標準時に変換して出力できる方法をまとめてみた。

準備:Pythonライブラリ"pytz"をインストールする

"pytz"はPython標準ライブラリではないが、ドキュメントの中で使用が推奨されているので、準標準ライブラリと考えられる。
インストール方法は下記

pip install pytz


Python で UTCから日本標準時への変換

タイムゾーンを扱うモジュールをインポートする

import pytz

タイムゾーンを設定する為には下記関数を用いる

# UTCに設定
pytz.timezone("utc")

# "Asia/Tokyo"に設定
pytz.timezone("Asia/Tokyo")

次にdatatimeクラスにタイムゾーンを設定する為には下記関数を用いる

// UTCをタイムゾーンをして設定する
datetime().astimezone(pvtz.timezone("utc"))

以上から、前回まとめた日の出の時刻を計算した結果を日本標準時に変換するには下記の処理で実現できる

import pytz
import ephem

location = ephem.Observer()
location.lat,location.lon='34.877599','138.333849'
location.date = '2018/1/1'

result = location.previous_rising(ephem.Sun())
print(result)
# 2017/12/31 21:53:58  // UTCが出力される

print(result.datetime())
# datetime.datetime(2017, 12, 31, 21, 53, 57, 653083)  // datetime形式で出力
# 但しタイムゾーンが設定されていない。ここが問題。

# UTCを設定
result_utc = result.datetime().astimezone(pytz.timezone('utc'))
# print(result_utc)
# datetime.datetime(2017, 12, 31, 12, 53, 57, 653083, tzinfo=<UTC>) // UTCがセットされる

# 日本標準時に変換
result_jp = pytz.timezone('Asia/Tokyo').normalize(pytz.utc.localize(result.datetime()).astimezone(pytz.timezone('Asia/Tokyo')))

# 結果を出力
print(result_jp)
# datetime.datetime(2018, 1, 1, 6, 53, 57, 653083, tzinfo=<DstTzInfo 'Asia/Tokyo' JST+9:00:00 STD>) // 日本時間 2018/1/1 6:53:57 に日の出!

以上から、UTC処理された結果を日本標準時に変換することができた!!



日の出時間の計算方法 【Python PyEphem】使ってみた!

2018年の初日の出時間を正確に調べる方法を調査した結果、Pythonのライブラリ"PyEphem"でそれっぽいことができることがわかったところまでが、先日の投稿。

今日はその使い方に関してまとめてみる。
日の出時間を計算するだけでなく、日の入りや色々な数値も可能…



一先ず環境構築 ("python3 -m venv" オプションで…)

今回は 仮想環境にPython3 をベースにした環境を構築する。Python3 標準搭載の venv オプションを用いる。

カレントディレクトリ上に仮想環境を構築するためのコマンド。"venv"ディレクトリが構築される。

python3 -m venv venv

仮想環境の実行

仮想環境実行コマンド

source venv/bin/activate

この結果、コンソール上に "(venv)" が表示され、仮想環境への突入がわかる

"PyEphem"ライブラリーの実験

まずは"PyEphem"ライブラリのインストールから…

pip install pyephem

日の出時間の計算サンプル

import ephem

location = ephem.Observer()
location.lat,location.lon = '34.877599','138.333849'
location.date = '2018/01/01'
print(location.previous_rising(ephem.Sun()))

結果

2017/12/31 21:53:58

日の出時間が31日、しかも深夜の時間…不思議な結果。
だけどご心配なく!!

GMT(世界標準時時間)での出力になってるためだから、時差9時間進めれば結果は、

2018/01/01 06:53:58

となる。

上記location.lat, location.lonの部分に緯度、経度を入力する。更にlocation.dateに日の出時刻を得たい日時を入力する。

以上で、簡単に目的地点の日の出情報を得られる。

これ以外にも、下記のような時間情報を取得できる。

location.previous_rising(ephem.Sun()    // 前回、日の出時間
location.next_setting(ephem.Sun())  // 次回、日の入り時間
location.previous_rising(ephem.Moon())  // 前回、月の出た時間
location.next_setting(ephem.Moon()) // 次回、月の入った時間


↑このページのトップヘ

-->