Kazuhito00のプログラミング、その他、備忘録。

日々調べてたことや、作ってみたものをメモしているブログ。 お決まりの断り文句ですが、このブログに書かれている内容は個人の見解であり、所属する組織の公式見解ではありません。チラ裏。

【Julia1.1】プルリクエスト状態のパッケージをインストールする

メモメモ。 そもそも、私がドキュメントをちゃんと読んでなかっただけなのですが。。。

add [パッケージ]#[コミットSHA]で追加可能。

コミットSHAの他にブランチ名も指定可能。

以下はMP3パッケージのコミットSHA:170c9c9ac84f43d881c9aaa8459c4be14fe485a5をインストールした例。

pkg> add MP3#170c9c9ac84f43d881c9aaa8459c4be14fe485a5

f:id:Kazuhito00:20190618014508p:plain

■参考URL

 3. Managing Packages

 https://julialang.github.io/Pkg.jl/v1/managing-packages/

以上。

【Windows】【Python】PDFファイルを画像化してOpenCVで扱う

PythonでPDFを画像として取り込みたかったためメモ。

pdf2imageを利用して実現しています。pillowに依存にしているようなため、以下でインストール。

pip install pdf2image
pip install pillow

また、PDF閲覧にpopplerライブラリを利用するため、「Poppler for Windows」から、poppler-0.68.0_x86.7z(2019/5/31時点最新版)をダウンロードして適当な場所に解凍。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# pyinstaller --onefile pdfcrop.py

import os
import numpy as np
import cv2 as cv
import pdf2image


def main():
    # popplerへの環境変数PATHを一時的に付与 ###################################
    poppler_path = os.path.join(os.getcwd(), "poppler-0.68.0", "bin")
    os.environ["PATH"] += os.pathsep + poppler_path

    # pdf2imageを用いてPDFファイルを画像へ変換 ################################
    filepath = os.path.abspath(os.path.dirname(__file__))
    filepath = os.path.join(filepath, "pdf", "template.pdf")

    pdfimages = pdf2image.convert_from_path(filepath)

    # 読み込んだ画像はRGB形式のためBRGへ変換し画面表示 #########################
    cvimage = np.asarray(pdfimages[0])
    cvimage = cv.cvtColor(cvimage, cv.COLOR_RGB2BGR)
    cvimage = cv.resize(cvimage, (480, 640))

    cv.imshow("pdf2image sample", cvimage)

    cv.waitKey(-1)


if __name__ == '__main__':
    main()

以上。

ThinkPad X1 Extreme購入

現行使用しているパソコンが相当ガタが来ているので、冬の賞与をあてにして、 「ThinkPad X1 Extreme」を注文しました。

ThinkpadLenovoになる前に使用していて、しばらく離れていたのですが、今回色々PCを見比べた結果、Thinkpadに決定。

ただ、注文~発送~納品までには結構時間がかかるようで、以下に記録していこうかと思います。

2018/12/5 :注文、クレジットカード決済

2018/12/22[延期]2018/12/25[延期]2018/12/29 → 2018/12/25(唐突に発送連絡有り) :発送済

2018/12/28[延期]2019/1/4[延期]2019/1/10 → 2019/1/5 :納品済み

www.lenovo.com

【OpenCV】【Python】画像上に透過付き画像を重ねて描画

もはや、タイトルが詐欺くさい気がしないでもないです(第2弾

OpenCV単体だと、ちょっとだけ面倒なのでPillow(PIL)を利用しております。

画像に透過付き画像を重ねたいことが、ちょいちょいあるのですが、 パッと思いつく範囲で以下のような対応があります(大変な順に。。。

 ・αチャンネルを元にマスク画像を生成し、マスク画像で切り抜いた画像を重ねる

 ・Pillow等の他ライブラリを用いて画像を重ねる

今回はパッと表示したいだけだったので、Pillowを利用します。 ソースコードは以下。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import cv2 as cv
import numpy as np
from PIL import Image


class CvOverlayImage(object):
    """
    [summary]
      OpenCV形式の画像に指定画像を重ねる
    """

    def __init__(self):
        pass

    @classmethod
    def overlay(
            cls,
            cv_background_image,
            cv_overlay_image,
            point,
    ):
        """
        [summary]
          OpenCV形式の画像に指定画像を重ねる
        Parameters
        ----------
        cv_background_image : [OpenCV Image]
        cv_overlay_image : [OpenCV Image]
        point : [(x, y)]
        Returns : [OpenCV Image]
        """
        overlay_height, overlay_width = cv_overlay_image.shape[:2]

        # OpenCV形式の画像をPIL形式に変換(α値含む)
        # 背景画像
        cv_rgb_bg_image = cv.cvtColor(cv_background_image, cv.COLOR_BGR2RGB)
        pil_rgb_bg_image = Image.fromarray(cv_rgb_bg_image)
        pil_rgba_bg_image = pil_rgb_bg_image.convert('RGBA')
        # オーバーレイ画像
        cv_rgb_ol_image = cv.cvtColor(cv_overlay_image, cv.COLOR_BGRA2RGBA)
        pil_rgb_ol_image = Image.fromarray(cv_rgb_ol_image)
        pil_rgba_ol_image = pil_rgb_ol_image.convert('RGBA')

        # composite()は同サイズ画像同士が必須のため、合成用画像を用意
        pil_rgba_bg_temp = Image.new('RGBA', pil_rgba_bg_image.size,
                                     (255, 255, 255, 0))
        # 座標を指定し重ね合わせる
        pil_rgba_bg_temp.paste(pil_rgba_ol_image, point, pil_rgba_ol_image)
        result_image = \
            Image.alpha_composite(pil_rgba_bg_image, pil_rgba_bg_temp)

        # OpenCV形式画像へ変換
        cv_bgr_result_image = cv.cvtColor(
            np.asarray(result_image), cv.COLOR_RGBA2BGRA)

        return cv_bgr_result_image

使用例は以下。 例では、いらすとや様の画像を使用しております。

if __name__ == '__main__':
    cv_background_image = cv.imread("bg_takeyabu_layer2.jpg")
    cv_overlay_image = cv.imread(
        "ninja_hashiru.png",
        cv.IMREAD_UNCHANGED)  # IMREAD_UNCHANGEDを指定しα込みで読み込む
    cv_overlay_image = cv.resize(cv_overlay_image, (100, 100))

    point = (550, 250)

    image = CvOverlayImage.overlay(cv_background_image, cv_overlay_image,
                                   point)

    cv.imshow("sample", image)
    cv.waitKey(0)
f:id:Kazuhito00:20181210010330j:plainf:id:Kazuhito00:20181210010336p:plain ⇒  f:id:Kazuhito00:20181210010342p:plain

以上。

【Python】importしたモジュールやパッケージの場所を調べる

半年に1回くらい特殊な状況(Jetsonとか環境魔改造したとか)で場所を 調べることがあるためメモ。

モジュール本体かinit.pyの場所を取得

import tensorflow
print(tensorflow.__file__)

 実行例:C:\Users\XXXXXXXX\Anaconda3\envs\OpenCV_3_4_1\lib\site-packages\tensorflow__init__.py

パッケージの場所を取得

import tensorflow
print(tensorflow.__path__)

 実行例:['C:\Users\XXXXXXXX\Anaconda3\envs\OpenCV_3_4_1\lib\site-packages\tensorflow']

以上。

2018年 IT系 取得資格

恐らく今年中には資格試験を受けないため、合格したものまとめ。

 

・画像処理エンジニア検定 エキスパート

 

・JDLA Deep Learning for GENERAL 2018 #1

 

 

pythonエンジニア認定基礎試験

Python合格体験記を書いたらノベルティもらえました。

 f:id:Kazuhito00:20181202222837j:plain

 

【OpenCV】【Python】画像上に日本語のテキストを描画

もはや、タイトルが詐欺くさい気がしないでもないです。
OpenCV単体だと大変なのでPillow(PIL)を利用しております。

日本語テキストを描画しようとしたら、
パッと思いつく範囲で以下のような対応があります(大変な順に。。。
 ・OpenCVソースコードを修正しputTextをマルチバイト文字対応させる
 ・日本語フォントの文字画像を用意し、対象画像に重ね合わせて描画する
 ・日本語対応している他ライブラリに渡して描画する

今回はパッと表示したいだけだったので、Pillowを利用します。
ソースコードは以下。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import cv2 as cv
import numpy as np
from PIL import ImageFont, ImageDraw, Image

class CvPutJaText:
    def __init__(self):
        pass

    @classmethod
    def puttext(cls, cv_image, text, point, font_path, font_size, color=(0,0,0)):
        font = ImageFont.truetype(font_path, font_size)
        
        cv_rgb_image = cv.cvtColor(cv_image, cv.COLOR_BGR2RGB)
        pil_image = Image.fromarray(cv_rgb_image)
        
        draw = ImageDraw.Draw(pil_image)
        draw.text(point, text, fill=color, font=font)
        
        cv_rgb_result_image = np.asarray(pil_image)
        cv_bgr_result_image = cv.cvtColor(cv_rgb_result_image, cv.COLOR_RGB2BGR)

        return cv_bgr_result_image

使用例は以下。

今回はフォントに「衡山毛筆フォント行書」を使用しております。

if __name__ == '__main__':
    cv_image = cv.imread("sample.jpg")
    
    font_path = './font/font_jb004_running_brush_wi.ttf'
    
    image = CvPutJaText.puttext(cv_image, u"ごんべ", (30, 30), font_path, 60, (0, 0, 0))

    cv.imshow("sample", image)
    cv.waitKey(0)

f:id:Kazuhito00:20180620025707p:plain 以上。