乙Py先生のプログラミング教室
初学者のためのプログラミング学習サイト

プログラミング

今回は今話題のChatGPTに
プログラミングをやってもらうことにしました

解説動画はこちら



ChatGPTについて

人工知能研究所であるOpenAIが開発し
2022年11月に公開されたチャットボットのことで

ローンチから5日間でユーザー数が100万人を突破し
2か月でユーザ数は1億人に達するなど
爆発的な人気を博しています


ChatGPTの仕組み

OpenAIが発表した高性能な言語モデル
「GPT-3(Generative Pre-trained Transformer)」を
対話用に微調整させたもので

文章の生成、要約、質問への回答、翻訳など
一般的な言語に関する事柄への対処に加え
プログラム言語で書かれた
コード生成などにも活用する事ができます


ChatGPTを使うには

openaiのWEBサイトにアクセスして

「Sign up」から登録
メアドかSNSアカウントを持っていれば
登録できます

電話番号を登録して
SMS認証すれば使える様になります


ChatGPTを使ってみる

早速ChatBotを使ってみました

画面左上の「New Chat」
から新しいチャットに遷移でき
画面下の入力欄に質問を打ち込めます


どんな感じになったかは
是非動画の方をご覧ください


いやー
まさかプログラミングしなくても
良い時代が来てしまうとは

我々の仕事も
遂に終わりを迎えてしまうのでしょうかね

今回はここまでです
それでは

 

乙py式5時間で学ぶプログラミング基礎(python編)


乙py3

短時間でプログラミングを学ぶ事ができる動画講座を作りました。

YOUTUBEの動画と資料を載せておきますので
ぜひ参考にしてくださいませ。


なおPythonチートシートを作成しています。


コーディングに迷った際に役に立ち

WEB検索する時間を無くして

作業時間を効率化できます。

note
Pythonチートシート

目次




1.この講座について
2.プログラミング言語について
3.プログラミング言語の学習方法について
4.プログラミングの学習環境について
5.目標設定について
6.Jupyterの使い方
7.演算
8.文字
9.インデックス
10.変数
11.予約語
12.データ型
13.文字列
14.文字列のフォーマット
15.算術演算子
16.代入演算子
17.関係演算子
18.論理演算子
19.基礎演習1
20.リスト1
20.リスト2
21.タプル
22.辞書型
23.if文
24.for文
25.while文
26.組み込み関数について
27.enumerate関数
28.zip関数
29.ソート
30.内包表記
31.基礎演習2
32.関数
33.global変数とスコープ
34.無名関数
35.オブジェクト指向の話
36.クラスについて
37.例外処理
38.ライブラリの利用
39.基礎演習3
40.まとめ
付録.その先、仕事とか、研究にどう使えるの?

今回はPythonで様々なファイルを
取り扱う方法についてです


解説動画はこちら



今回はPython言語で色々なファイルを取り扱う方法のまとめ
様々な形式のファイルの確認、再生、編集方法について

今回取り扱うファイル形式は
以下の通りです

テキストファイル
 txt , json , csv

エクセルファイル
 xlsx

画像ファイル
 png , jpeg

動画ファイル
 mp4 , mov

音声ファイル
 mp3 , WAV , AIFF


全体的にファイル名やファイルパスなどは
書き換えて行って下さい


1.テキストファイル
拡張子:.txt
プレーンテキストのことで
文字コードによって表される
データだけが含まれるファイル形式です

with openの構文で
ファイルを開けます

一気にファイルを開く方法
# テキストファイルを開く
with open('file/sample_text.txt') as _f:
    text = _f.read()
    
print(text)

ただし、上記の方法だと
サイズの大きいファイルを開くと
固まってしまう可能性があります

そんな場合は1行づつ読み込みします


ファイルを1行づつ開く方法
# テキストファイルを開く
with open('file/sample_text.txt') as _f:
    for i,row in enumerate(_f):
        # 特定行数でブレイクする
        if i>0:
            break
        print(row)

この場合は任意の行数でプレビューする事で
大きなサイズのファイルも開けます


テキストファイルの書き込み

with open構文に引数 w を追加すれば
書き込みを行えます

# テキストファイルを書き込みする
with open('file/out.txt','w') as _w:
    _w.write('さんぷる\n')
    _w.write('テキスト')
    _w.write('書いてみよう\n')



2.Json形式
拡張子 : .json
辞書形式のテキストファイルで
文字列のキーと値のペアをコロンで対
コンマ区切り、全体を波カッコ { } で括る
ファイル形式です


Jsonファイルを開く方法

jsonライブラリで
json.loadを使います
import json

with open('file/sample_json.json') as _f:
    json_data = json.load(_f)

print(json_data)
print(type(json_data))
print(len(json_data))

読み込み後のデータは
辞書型になっています


Jsonファイルをの書き込み

辞書型のデータを
json.dumpでjsonファイルに書き込みできます
sample_dict = {"A":1,"B":2,"C":{"D":444,"E":666}}

with open('file/out.json' , 'w') as _w:
    json.dump(sample_dict , _w , ensure_ascii=False)



3.CSVファイル
拡張子 : .csv
「 , 」カンマ区切りのテキストファイル

テキストファイル同様
with構文で読み書きが行えます

読み込んだあとに
カンマで区切ればデータ化できます
# CSVファイルを開く
with open('file/sample_csv.csv') as _f:
    for i,row in enumerate(_f):
        rows = row.replace('\n','').split(',')
        print(rows)


CSVライブラリを用いると いい感じでカンマ区切りを行ってくれます
# CSVライブラリを使用する場合
import csv

with open('file/sample_csv.csv') as _f:
    reader = csv.reader(_f)
    for row in reader:
        print(row)

CSVファイルの書き込みは
テキストファイル同様にし
拡張子を「.csv」にして
カンマ区切りのテキストにすれば
良いです



Pandasライブラリで開く場合

開いた場合のデータ形式は
「データフレーム」となります
import pandas as pd

df = pd.read_csv('file/sample_csv.csv')

df


PandasライブラリでCSVファイルの書き込み
df.to_csv('file/out.csv' , index=False)



4.エクセルファイル

拡張子 : .xlsx
MicrosoftのExcel形式


Pandasライブラリで開く場合

開いた場合のデータ形式は「データフレーム」となります
綺麗な表形式になっていないとうまく開けないので
注意が必要です


import pandas as pd

df = pd.read_excel('file/pop_area_2009.xlsx')

df


openpyxl を用いる方法

エクセル操作用のライブラリで
閲覧・編集・保存など様々な操作を行えます
要インストール(openpyxl)


openpyxlでエクセルファイルの読み込み
import openpyxl

wb = openpyxl.load_workbook('file/pop_area_2009.xlsx')

# ワークブック内のアクティブなシートを取得
ws = wb.active

# セルA1を表示
print(ws["A1"].value) 

openpyxlで行列を指定して閲覧
for r in range(1,5):
    for c in range(1,5):
        val = ws.cell(row=r, column=c).value
        print(val , end='\t')
    print()




5.画像ファイル
拡張子 : .png .jpegなど
静止画などの画像形式

PILでイメージの読み込み
Matplotlibで表示

import matplotlib.pyplot as plt
from PIL import Image
%matplotlib inline

# 画像の読み込み
im = Image.open("file/kosakana.png")

# 表示サイズの指定
plt.figure(figsize=(10, 12))
# 画像の表示
plt.imshow(im)
# 軸の表示の削除
plt.axis('off')
plt.show()



opencvで画像の読み込み

要インストール(opencv)
そのまま読み込みすると
色の順番がBGR(青、緑、赤)になってしまうので
RGBに変換が必要です
import matplotlib.pyplot as plt
import cv2
%matplotlib inline

# 画像の読み込み
im_cv = cv2.imread("file/kosakana.png")

# 画像のBGRをRGBに変換する
im_rgb = cv2.cvtColor(im_cv, cv2.COLOR_BGR2RGB)

# 表示サイズの指定
plt.figure(figsize=(10, 12))
# 画像の表示
plt.imshow(im_rgb)
# 軸の表示の削除
plt.axis('off')
plt.show()


モザイク処理なんかも
行う事ができます
# 画像の読み込み
im_cv = cv2.imread("file/kosakana.png")
# 画像のBGRをRGBに変換する
im_rgb = cv2.cvtColor(im_cv, cv2.COLOR_BGR2RGB)

# モザイク処理を行う
ratio = 0.06
tmp_img = cv2.resize(im_rgb, None, fx=ratio, fy=ratio, interpolation=cv2.INTER_NEAREST)
dst = cv2.resize(tmp_img, im_rgb.shape[:2][::-1], interpolation=cv2.INTER_NEAREST)

# 表示サイズの指定
plt.figure(figsize=(10, 12))
# 画像の表示
plt.imshow(dst)
# 軸の表示の削除
plt.axis('off')
plt.show()



6.動画ファイル
拡張子 : .mp4 .mov
静止画の集まり + 音声になっているので
opencvで開けます


opencvでのファイルの読み込み

import cv2

cap = cv2.VideoCapture('file/kosakana.mp4')

# データ型
print(type(cap))

# 動画のサイズ
print(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
print(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

# フレームレート
print(cap.get(cv2.CAP_PROP_FPS))

# フレーム数
print(cap.get(cv2.CAP_PROP_FRAME_COUNT))

# 秒数
print(cap.get(cv2.CAP_PROP_FRAME_COUNT) / cap.get(cv2.CAP_PROP_FPS))


Jupyter Notebookで動画ファイルの再生

単純なプレビューなら
Jupyter Notebookで行う事ができます
from IPython.display import Video

Video('file/result_voice.mp4',width=600)




7.音声ファイル

拡張子 : .mp3 .wav .aiff

Jupyter Notebookで音声ファイルの再生
from IPython.display import Audio

Audio('file/kosakana.wav')



Librosaライブラリを用いる方法

Pythonの音声解析用のライブラリで
様々な解析を行う事ができます
要インストール(librosa)

下記はバージョン0.9.2のコードです
バージョンによりメソッドが
かなり異なるので注意が必要です

Librosaで音声ファイルの読み込み

import librosa
import librosa.display
import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.simplefilter('ignore')
%matplotlib inline

print(librosa.__version__)

file_path = 'file/kosakana.wav'

# 音声をnumpyのndarrayに読み込みする
y, sr = librosa.load(file_path , sr=None, mono=False)


print(y.shape)
print(type(y))

# サンプリング周波数
print(sr)


Librosaで音声波形の表示
plt.figure(figsize=(12,6))
librosa.display.waveshow(y, sr)
plt.show()


Librosaでスペクトログラムの表示

音声を周波数分析して色による強さ
周波数、時間の3次元表示
y, sr = librosa.load(librosa.ex('choice'), duration=15)
fig, ax = plt.subplots(nrows=2, ncols=1, sharex=True ,figsize=(12, 10))
D = librosa.amplitude_to_db(np.abs(librosa.stft(y)), ref=np.max)
img = librosa.display.specshow(D, y_axis='linear', x_axis='time',sr=sr, ax=ax[0])



こんな感じで、Python言語では
様々な形式のファイルを扱う事ができます

上記で世の中にある
ほとんどのファイル操作が行えると思いますので
ファイルを取り扱って自動化したい場合は
参考にしてみて下さい

それでは







 

今回は音声に合わせて
リップシンク動画を作成できる
「Wav2Lip」でリップシンク動画を
作ってみました


解説動画はこちら



はじめに:

Wav2Lip: Accurately Lip-syncing Videos In The Wild

このWav2Lipというライブラリは
動画内の人物の口の形を
音声にあわせて変える事ができます

これを使えば簡単に
リップシンク動画を作る事ができます

音声に合わせて、動画の方を変えられるので
言ってない事を言ってる様に
見せる事ができます


インストール方法

Google Colabでの利用方法です

1.ランタイムのタイプを変更から「GPU」に変更する

CPUでは利用できないようなので
ランタイムの変更から「GPU」
に切り替えておきましょう

2.ライブラリのインストール
結構たくさんあるんですが
次のコードでライブラリ群のインストールが出来ます

Google Drive を利用するので
空き容量は確認しておきましょう
# MiniCondaのインストール
%%bash
MINICONDA_INSTALLER=Miniconda3-py37_4.8.2-Linux-x86_64.sh
MINICONDA_DOWNLOAD_HP=https://repo.anaconda.com/miniconda
MINICONDA_PREFIX=/usr/local
wget $MINICONDA_DOWNLOAD_HP/$MINICONDA_INSTALLER
chmod +x $MINICONDA_INSTALLER
./$MINICONDA_INSTALLER -b -f -p $MINICONDA_PREFIX
# Googleドライブのマウントと作業フォルダへの移動
from google.colab import drive
drive.mount('/content/drive')
%cd '/content/drive/My Drive/'
!mkdir W2L
%cd 'W2L'
# パッケージのインストール
!git clone https://github.com/Rudrabha/Wav2Lip.git
%cd Wav2Lip
!pip install -r requirements.txt
!pip install resampy==0.3.1
3.モデル(wav2lip.pth)を「Wav2Lip/checkpoints」に配置

以下のURLよりモデルをダウンロードして
checkpointsフォルダにアップロードする
モデルのダウンロード先

リンクは「Model」の「Wav2Lip」の「Link」です
ダウンロードやアップロードに時間がかかるので
Google DriveのUIで操作する方が早いかもしれません


4.音声と動画を「Wav2Lip」フォルダの直下に配置

音声(WAV形式) : ファイル名.wav
動画(MP4形式) : ファイル名.mp4
という名称でファイルを置いておきましょう

配置したファイルの確認は
次のコードで行えます

# 音声ファイルの確認
from IPython.display import Audio

audio_file_path = "kosakana.wav"
Audio(audio_file_path)

5.推論を実行

resultsフォルダ内に結果出力されます

!python inference.py \
    --checkpoint_path checkpoints/wav2lip.pth \
    --face 動画ファイル名.mp4 \
    --audio 音声ファイル名.wav

あとは出来上がりを確認してみましょう
どんなリップシンク動画になったのかは
動画をご覧ください

それでは

今回は物体検知のライブラリである
YOLOを使って色々な画像の物体を検知してみました

解説動画はこちら



YOLOとは

YOLOは
リアルタイムオブジェクト検出アルゴリズム
のことで、You Look Only Onseの略
だそうです

オブジェクトの検出と
クラス分類を同時に行う事ができ
画像をグリッドセルとして扱って
オブジェクトに当てはめ

オブジェクトが存在する場合
どのクラスに属するかを確率で示してくれる
というものです

早速物体検知をやってみましょう

Google Colabで使う事ができる
コードサンプルです

Google Colabへのインストール方法


一番最初はGoogle Driveのマウントです
# Google ドライブをマウントする
from google.colab import drive
drive.mount('/content/drive')

コードを実行すると
ドライブのマウントに関する
アカウントの許可が求められるので
自分のアカウントを指定します

次にコード類のインストールです
# マウント場所に移動
%cd  /content/drive/MyDrive/

# YOLO V5をGithubより入手
!git clone https://github.com/ultralytics/yolov5.git

# YOLOに必要なモジュールをインストール
%pip install -qr yolov5/requirements.txt

# インストール場所に移動
%cd  /content/drive/MyDrive/yolov5

これを実行すると
ドライブ内にインストールされる形になります


サンプル画像を見てみる

物体検知を行う画像は
data/images/ 配下に
置くようになっているようです

ここに画像を置いておきましょう

サンプル画像を確認するコードはこれです
# サンプル画像の表示
from IPython.display import Image, display
display(Image('画像パスを指定',width=400))

画像の物体検知を行うには
次のコードで行います
# 画像内の物体検知を行う
!python detect.py --source data/images/画像ファイル名

結果は
runs/detect/フォルダ名
配下の同名のファイルになります

サンプル画像で行うと
こんな結果になります

download

オブジェクトが存在する領域を
バウンディングボックスで
ボックス内のクラス分類を行って
その確率を0-1の間で返してくれます


動画では
色々なサンプル画像で検出を行っているので
そちらも参考にしてみて下さい

今回はここまでです
それでは


このページのトップヘ