TLPA データの作成

  • Date: 2020-0218
  • Author: 浅川伸一
  • Reference: 「失語症語彙検査」の開発,藤田 et al.(2000)
  • Thanks to: 大門正太郎先生(画像提供)

Input files:

  • 2020tlpa_stim.txt: 藤田ら(2000) の論文中に出てくる検査刺激 200 語の 単語属性,単語のカテゴリ(10種類)と親密度(H,L)
  • tlpa_data.json: 上記 2020tlpa_stim.txt を元に作成された json ファイル
  • /Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/*.jpg: 呼称検査画像ファイル群

Output files:

  • tlpa_noun_data.pkl: 2020年1月7日に大門先生から送っていただいた名詞図版のデータ
  • tlpa_noun_imgs.npz: 同上の np.array の画像データ
  • tlpa_images.npz: 2020年2月に大門先生から送っていただいた図版を np.array 形式
  • tlpa_images_data.pkl: 2020年2月に大門先生から送っていただいたデータの辞書形式データ

Working directory name:

  • /Users/asakawa/study/2020cnps_aphasia
In [1]:
# 作業用ディレクトリを指定
Base_dir = '/Users/asakawa/study/2020cnps_aphasia/'

!printf "\n"
!pwd; 
!printf "\n"
!ls -lt tlpa*
#!ls -lt tlpa*
/Users/asakawa/Downloads/2020-0129/notebooks

-rw-r--r--  1 asakawa  staff    22867716 Feb 24 15:06 tlpa.pkl
-rw-r--r--  1 asakawa  staff    67652611 Feb 24 15:06 tlpa.json
-rw-r--r--@ 1 asakawa  staff     1211630 Feb 24 15:06 tlpa_imgs.npz
-rw-r--r--  1 asakawa  staff       16215 Feb 22 17:21 tlpa_feat.json
-rw-r--r--@ 1 asakawa  staff    21614705 Feb 20 10:10 tlpa_data.pkl
-rw-r--r--@ 1 asakawa  staff       18399 Feb 20 09:43 tlpa_feat.json.save
-rw-r--r--@ 1 asakawa  staff     1204795 Feb 20 08:11 tlpa_images.npz
-rw-r--r--  1 asakawa  staff    60964910 Feb 20 07:55 tlpa_data2.json
-rw-r--r--@ 1 asakawa  staff    12815087 Feb 20 05:35 tlpa_noun_imgs.npz
-rw-r--r--@ 1 asakawa  staff  1040415921 Feb 20 05:35 tlpa_noun_data.pkl
lrwxr-xr-x  1 asakawa  staff          52 Feb 17 11:23 tlpa_data.json -> /Users/asakawa/study/2020cnps_aphasia/tlpa_data.json
In [2]:
# 必要なライブラリの輸入
import numpy as np
import json
import codecs
import os
import sys
import glob
import pickle

from PIL import Image
import matplotlib.pyplot as plt
%matplotlib inline
In [3]:
# 自作の関数を輸入 numpy.array を json dump するための class NumpyEncoder
from utils import save_as_a_json

準備作業

  • 2020年1月7日に大門先生から送っていただいた TLPA 名詞図版の名前
In [4]:
# 2020年1月7日に大門先生から送っていただいた TLPA 名詞図版の名前
tlpa_nouns = ["手", "パイプ", "糸", "灯台", "窓", "地図", "卵", "槍", "電話", "竜巻",
 "先生", "海苔", "カメラ", "シューマイ", "スカート", "プロレス","馬", "ロケット", "手紙", "綱",
 "バナナ", "湖", "テレビ", "楽譜", "新聞", "屏風", "車", "らくだ", "病院", "パイナップル",
 "太陽", "水着", "海", "算盤", "寿司",  "塀", "お金", "肘", "野球", "神主"]

# TLPA の各刺激の属性を表す辞書を定義
tlpa_feat = {"カテゴリー":
             {"I":"屋内部位", "E":"建造物", "A":"動物", "C":"色", 
              "F":"加工食品", "V":"野菜果物", "P":"植物", "T":"乗り物", 
              "B":"身体部位", "D":"道具"},
             "親密度":{"H":"高親密度", "L":"低親密度"}}
In [5]:
# 定義の確認
for k in tlpa_feat.keys():
    # 辞書に格納されている辞書項目の印刷
    print(k) 
    
    # 各辞書項目の示す内容は更に辞書になっている,
    # すなわち辞書の中に辞書が入れ子になっているからその内容を取り出す
    for kk, vv in tlpa_feat[k].items():
        print(kk, tlpa_feat[k][kk], end=', ')
    print()
カテゴリー
I 屋内部位, E 建造物, A 動物, C 色, F 加工食品, V 野菜果物, P 植物, T 乗り物, B 身体部位, D 道具, 
親密度
H 高親密度, L 低親密度, 
In [6]:
## ファイル名の指定, 下記ファイルは論文に掲載されていた表から作成した
txt_file = os.path.join(Base_dir, '2020tlpa_stim.txt')

# 直上のファイルを読み込む
tlpa = {}
with codecs.open(txt_file, 'rb', encoding='utf-8') as f:
    l = f.readlines()
    
# 最初の200行は TLPA の属性データ    
for ll in l[:200]:
    a_entry = ll.strip().split(' ')
    tlpa[int(a_entry[0])] = {'Seq' :int(a_entry[0]),
                             'Cat':str(a_entry[1]),
                             'Fam':str(a_entry[2]),
                             'label':str(a_entry[3])}

#201 行目はその説明   
tlpa_description = json.loads(l[201])
#tlpa['Description'] = ind

# 出来上がったデータを json ファイルとして書き出し
save_as_a_json(tlpa, 'tlpa.json')
In [7]:
#tlpa.keys()
In [8]:
# 古い作業記録保持のために消していない。だが実行はしない

# tlpa_feat という辞書データとパワーポイントから作成したデータの対応表を作成
#i = 1
#transform_dict = {}
#for k in tlpa_feat.keys():
#    if no == "Descripiton":
#        break
#    #transform_dict[i] = (tlpa_feat[no]['Seq'], tlpa_feat[no]['Name'])
#    #transform_dict[k] = (tlpa_feat[k]['Seq'], tlpa_feat[k]['Name'])

#print(transform_dict)
In [9]:
# 古い作業記録保持のために消していない。だが実行はしない

# 大門先生からいただいた TLPA呼称画像ファイルが 4 分割されていた。
# それらの中には色名呼称検査に用いられる画像は含まれていないため,パワーポイントファイルから
# png 画像ファイルへと各画像を変換した際のファイル名に振られる連番と齟齬が発生するため
# 齟齬を吸収するための作業
#img_file_order = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
#                  21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
#                  39, 40, 41, 42, 43, 44, 45, 
#                  51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 
#                  69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 
#                  87, 88, 89, 90, 91, 92, 93, 94, 95, 
#                  101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
#                  116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
#                  131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
#                  151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
#                  166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
#                  181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195)
#
# ファイル名の連番から実際の TLPA 連番への変換表の作成 
#file2num = {i:transform_dict[j][0] for i, j in zip(img_file_order, tlpa_feat.keys())}
#file2num = {transform_dict[j][0]:i for i, j in zip(img_file_order, tlpa_feat.keys())}
#print(file2num)
#print(file2num[195]) # 200, すなわち Slide195.jpg は TlPA番号で 200 の `もみじ` の画像を指す
#print(file2num)
In [10]:
# 古い作業記録保持のために消していない。だが実行はしない
#img_root = os.path.join(Base_dir,'TLPA_naming_images/')
#for f in reversed(sorted(file2num.keys())):
#    src = 'Slide' + "{0:03d}".format(f) + '.png'
#    src = os.path.join(img_root, src)
#    dst = "{0:03d}".format(file2num[f]) + '.png'
#    dst = os.path.join(img_root,dst)
#    os.rename(src, dst)
#    #print(src, dst)
In [11]:
#for i, j in zip(img_file_order, tlpa_feat.keys()):
#    k = transform_dict[j][0]
for k in tlpa.keys():
    if k == "Description":
        break
    print('k:{0}: {1} {2} {3} {4}'.format(k, 
                                          tlpa[k]['Seq'], tlpa[k]['label'], 
                                          tlpa[k]['Cat'], tlpa[k]['Fam']))
k:1: 1 バス T H
k:2: 2 緑 C H
k:3: 3 桜 P H
k:4: 4 のり巻き F L
k:5: 5 五重塔 E L
k:6: 6 コップ D H
k:7: 7 ごぼう V L
k:8: 8 土踏まず B L
k:9: 9 風呂 I H
k:10: 10 ヒトデ A L
k:11: 11 ハム F H
k:12: 12 兎 A H
k:13: 13 ロープウエイ T L
k:14: 14 学校 E H
k:15: 15 ちりとり D L
k:16: 16 縁側 I L
k:17: 17 歯 B H
k:18: 18 ネギ V H
k:19: 19 あじさい P L
k:20: 20 灰色 C L
k:21: 21 天井 I H
k:22: 22 鍵 D H
k:23: 23 肌色 C L
k:24: 24 ワニ A L
k:25: 25 電車 T H
k:26: 26 顔 B H
k:27: 27 松 P H
k:28: 28 ガードレール E L
k:29: 29 柿 V L
k:30: 30 ちまき F L
k:31: 31 信号 E H
k:32: 32 すすき P L
k:33: 33 じょうろ D L
k:34: 34 コンセント I L
k:35: 35 天ぷら F H
k:36: 36 中指 B L
k:37: 37 ョット T H
k:38: 38 ピンク C H
k:39: 39 ふくろう A L
k:40: 40 みかん V H
k:41: 41 柱 I L
k:42: 42 角砂糖 F L
k:43: 43 犬 A H
k:44: 44 かご T L
k:45: 45 バラ P H
k:46: 46 鍋 D H
k:47: 47 まぶた B L
k:48: 48 くるみ V L
k:49: 49 黒 C H
k:50: 50 デパート E H
k:51: 51 カーネーション P L
k:52: 52 城 E L
k:53: 53 蟻 A H
k:54: 54 豆腐 F H
k:55: 55 ドライバー D L
k:56: 56 紺 C L
k:57: 57 階段 I H
k:58: 58 戦車 T L
k:59: 59 人参 V H
k:60: 60 背中 B H
k:61: 61 鏡餅 F L
k:62: 62 スプーン D H
k:63: 63 朝顔 P H
k:64: 64 金色 C L
k:65: 65 足 B H
k:66: 66 ふすま I L
k:67: 67 蛇 A H
k:68: 68 レモン V L
k:69: 69 公園 E H
k:70: 70 乳母車 T L
k:71: 71 床 I H
k:72: 72 藤 P L
k:73: 73 ピンセット D L
k:74: 74 トラック T H
k:75: 75 苺 V H
k:76: 76 黄土色 C L
k:77: 77 銭湯 E L
k:78: 78 ナマズ A L
k:79: 79 そば F H
k:80: 80 お腹 B H
k:81: 81 オレンジ C H
k:82: 82 バター F H
k:83: 83 工場 E H
k:84: 84 鳩 A H
k:85: 85 電卓 D L
k:86: 86 喉仏 B L
k:87: 87 チューリップ P H
k:88: 88 白菜 V L
k:89: 89 トラクター T L
k:90: 90 廊下 I L
k:91: 91 パトカー T H
k:92: 92 押入れ I H
k:93: 93 鉛筆 D H
k:94: 94 目尻 B L
k:95: 95 芋 V H
k:96: 96 吊り橋 E L
k:97: 97 赤 C H
k:98: 98 かき氷 F L
k:99: 99 豹 A L
k:100: 100 サボテン P L
k:101: 101 ピラミッド E L
k:102: 102 サイ A L
k:103: 103 目 B H
k:104: 104 ひまわり P H
k:105: 105 はたき D L
k:106: 106 剌身 F H
k:107: 107 玄関 I H
k:108: 108 トマト V H
k:109: 109 黄緑 C L
k:110: 110 三輪車 T L
k:111: 111 鶏 A H
k:112: 112 つむじ B L
k:113: 113 アスパラガス V L
k:114: 114 ドア I H
k:115: 115 銀色 C L
k:116: 116 すりこぎ D L
k:117: 117 ウイスキー F L
k:118: 118 梅 P H
k:119: 119 タクシー T H
k:120: 120 動物園 E H
k:121: 121 床の間 I L
k:122: 122 焦げ茶 C L
k:123: 123 ぷどう V H
k:124: 124 飴 F H
k:125: 125 毛虫 A L
k:126: 126 アイロン D H
k:127: 127 寺 E H
k:128: 128 そり T L
k:129: 129 ひょうたん P L
k:130: 130 首 B H
k:131: 131 消しゴム D H
k:132: 132 頬 B L
k:133: 133 いちょう P L
k:134: 134 駅 E H
k:135: 135 ギョウザ F L
k:136: 136 牛 A H
k:137: 137 びわ V L
k:138: 138 飛行機 T H
k:139: 139 亘旦 I L
k:140: 140 白 C H
k:141: 141 竹 P H
k:142: 142 ペリカン A L
k:143: 143 紫 C H
k:144: 144 手すり I L
k:145: 145 口 B H
k:146: 146 大根 V H
k:147: 147 風車 E L
k:148: 148 鋏 D H
k:149: 149 潜水艦 T L
k:150: 150 ステーキ F L
k:151: 151 マッチ D H
k:152: 152 二階 I L
k:153: 153 落花生 V L
k:154: 154 御飯 F H
k:155: 155 自転車 T H
k:156: 156 歩道橋 E L
k:157: 157 鯨 A H
k:158: 158 茶色 C H
k:159: 159 菖蒲 P L
k:160: 160 ふくらはぎ B L
k:161: 161 桃 V H
k:162: 162 鯛焼き F L
k:163: 163 道路 E H
k:164: 164 靴べら D L
k:165: 165 水色 C L
k:166: 166 壁 I H
k:167: 167 たんぽぽ P H
k:168: 168 いかだ T L
k:169: 169 山羊 A L
k:170: 170 鼻 B H
k:171: 171 海老 A H
k:172: 172 台所 I H
k:173: 173 オートバイ T H
k:174: 174 かぶ V L
k:175: 175 柳 P L
k:176: 176 しゃもじ D L
k:177: 177 まんじゅう F H
k:178: 178 かかと B L
k:179: 179 うす紫 C L
k:180: 180 家 E H
k:181: 181 おせち料理 F L
k:182: 182 青 C H
k:183: 183 傘 D H
k:184: 184 つくし P L
k:185: 185 りんご V H
k:186: 186 馬車 T L
k:187: 187 線路 E L
k:188: 188 竜の落とし子 A L
k:189: 189 耳 B H
k:190: 190 便所 I H
k:191: 191 蓮根 V L
k:192: 192 猫 A H
k:193: 193 黄色 C H
k:194: 194 へそ B L
k:195: 195 街灯 E L
k:196: 196 障子 I L
k:197: 197 酒 F H
k:198: 198 船 T H
k:199: 199 安全ピン D L
k:200: 200 もみじ P H
In [14]:
"""
- 2020年2月11日に大門先生から送っていただいた画像の読み込み
- Original file names: 
    TLPA呼称図版1-50.pptx, TLPA呼称図版51-100.pptx, TLPA呼称図版101-150.pptx
    TLPA呼称図版151-200.pptx
- 上記 original file names の 4 ファイルを画像ファイル,形式 png にして保存した。
- 画像番号とファイル番号が食い違っていたため修正が必要
"""
image_basedir = os.path.join(Base_dir, 'TLPA_naming_images')
files = glob.glob(os.path.join(image_basedir,'*.png'))

#N = len(files)
N = 200 # TLPA の刺激数は全部で 200

max_width, max_height = 0, 0
for file in files:

    # ファイルの読み込み
    plimg = Image.open(file)
    
    # 最大,最小幅を計算
    bbox = plimg.getbbox()
    height, width = bbox[3] - bbox[1], bbox[2] - bbox[0]
    max_width = width if max_width < width else max_width
    max_height = height if max_height < height else max_height

# 上で計算した画面サイズの最大値を用いて numpy.array を定義
tlpa_imgs = np.zeros((N, max_height, max_width, 3), dtype=np.uint8)

for file in sorted(files):
    
    plimg = Image.open(file)  # file の読み込み
    if plimg.mode != "RGB":
        print(file, plimg.mode)
        plimg = plimg.convert("RGB")

    bbox = plimg.getbbox()  # 切り取り矩形領域の定義
    height, width = bbox[3] - bbox[1], bbox[2] - bbox[0]  # 画像の縦と横を計算
    img = np.asarray(plimg.crop(plimg.getbbox()), dtype=np.uint16)  # 顔像の切り取り実行
    
    # 画像ファイル名から検査図版番号を計算
    num = int(os.path.split(file)[-1].split('.')[0].replace('Slide','',1))
    
    # 画像データを tlpa_imgs へ格納
    tlpa_imgs[num - 1,:img.shape[0],:img.shape[1],] = np.copy(img)
    
    # データベースの更新
    tlpa[num] = {'id': num, 
                 'data': img if tlpa[num]['Cat'] is not 'C' else np.nan,
                 'label': tlpa[num]['label'], 
                 'file' : os.path.split(file)[-1],
                 'Cat' : tlpa[num]['Cat'],
                 'Fam': tlpa[num]['Fam'],
                }
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/002.png RGBA
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/020.png RGBA
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/023.png RGBA
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/038.png RGBA
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/049.png RGBA
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/056.png RGBA
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/064.png RGBA
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/076.png RGBA
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/081.png RGBA
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/097.png RGBA
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/109.png RGBA
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/115.png RGBA
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/122.png RGBA
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/140.png RGBA
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/143.png RGBA
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/158.png RGBA
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/165.png RGBA
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/179.png RGBA
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/182.png RGBA
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/193.png RGBA

色情報画像の取り込み,処理 ,保存

  • ここからしばらく手作業
In [15]:
"""
- 2020年2月21日に大門先生から送っていただいた色名呼称用画像の読み込み
- Original file names: 
    色.pptx
- 上記 original file names の 4 ファイルを画像ファイル,形式 png にして保存した。
"""

# 色情報画像ファイルの格納場所
color_basedir = os.path.join(Base_dir, '2020tlpa_color_imgs')
files = sorted(glob.glob(os.path.join(color_basedir,'*.png')))

max_width, max_height = 0, 0
for file in sorted(files):

    # ファイルの読み込み
    plimg = Image.open(file)
    
    # 最大,最小幅を計算
    width, height = plimg.size
    max_width = width if max_width < width else max_width
    max_height = height if max_height < height else max_height

print(plimg.size)
print(max_height, max_width)
print(files)
(720, 405)
405 720
['/Users/asakawa/study/2020cnps_aphasia/2020tlpa_color_imgs/Slide1.png', '/Users/asakawa/study/2020cnps_aphasia/2020tlpa_color_imgs/Slide2.png', '/Users/asakawa/study/2020cnps_aphasia/2020tlpa_color_imgs/Slide3.png', '/Users/asakawa/study/2020cnps_aphasia/2020tlpa_color_imgs/Slide4.png']
In [16]:
# 大門先生からいただいた色情報のパワーポイントファイルが 4 ページ
# だったので 4 枚の png 画像として書き出したデータを読み込む
# 全色データの表示    
fig = plt.figure(figsize=(12, 16))
for i, file in enumerate(files):
    ax = fig.add_subplot(4, 2, i+1)
    img = Image.open(file)
    img_ = np.asarray(img, dtype=np.uint8)
    ax.set_axis_off()
    ax.imshow(img_)
In [17]:
np.set_printoptions(precision=0)  # numpy.array の表示桁数を抑制
In [20]:
#img = Image.open('/Users/asakawa/study/2020cnps_aphasia/2020tlpa_color_imgs/Slide4.png')

# 上の画像データから色情報を読取るために,10枚の図版の位置を表す矩形領域を定義
fig = plt.figure(figsize=(12, 2))
boxes = {0:(100,  52, 139, 155),  # left, upper, right, lower
         1:(220,  52, 259, 155),
         2:(350,  52, 389, 155),
         3:(450,  52, 489, 155),
         4:(560,  52, 599, 155),
         5:(100, 252, 139, 355),
         6:(220, 252, 259, 355),
         7:(350, 252, 389, 355),
         8:(450, 252, 489, 355),
         9:(560, 252, 599, 355)}

# 上の結果から,切り出す画像領域の横と縦を計算
width, height = 139 - 100, 155 - 52

# 計算結果に基づいて numpy.array を用意
color_imgs = np.ndarray([4,10,height,width,3], dtype=np.uint8)

# 画像を表示させながら,色情報の平均値を計算
for i in range(4):
    fname = color_basedir + '/Slide' + str(i+1) + '.png'
    img = Image.open(fname).convert("RGB")
    plt.imshow(np.asarray(img, dtype=np.uint8))
    plt.show()
    print('card={}'.format(i))
    for j in range(10):
        print('img={} '.format(j), end="")
        img_cropped = img.crop(boxes[j])
        color_imgs[i][j] = np.copy(np.asarray(img_cropped, dtype=np.uint8))
        print('R:G:B=', end="")
        for k in range(3):
            #print('{0} '.format(np.mean(color_imgs[i][j][:][:][k],axis=0)),end=" ")
            #print('{0} '.format(np.mean(color_imgs[i][j][k],axis=0),end=""),end=" ")
            #print('{0} '.format(np.mean(color_imgs[i][j][:][:][k], axis=0)),end="")
            print('{0} '.format(np.mean(color_imgs[i][j][k], axis=0)),end="")
        print()
card=0
img=0 R:G:B=[198. 208. 150.] [198. 207. 150.] [198. 207. 150.] 
img=1 R:G:B=[183.  51.  18.] [184.  51.  18.] [184.  50.  17.] 
img=2 R:G:B=[253. 253. 253.] [255. 255. 255.] [254. 255. 255.] 
img=3 R:G:B=[159.  74.  32.] [159.  74.  31.] [159.  73.  31.] 
img=4 R:G:B=[179. 179. 178.] [177. 178. 176.] [177. 178. 176.] 
img=5 R:G:B=[229. 139.  45.] [229. 138.  43.] [229. 138.  40.] 
img=6 R:G:B=[241. 208. 215.] [241. 208. 214.] [241. 208. 214.] 
img=7 R:G:B=[ 32.  62. 130.] [ 30.  61. 129.] [ 29.  60. 128.] 
img=8 R:G:B=[154. 139.  96.] [153. 138.  94.] [153. 138.  93.] 
img=9 R:G:B=[ 39. 135. 101.] [ 36. 133.  99.] [ 35. 133.  98.] 
card=1
img=0 R:G:B=[ 69.  53. 112.] [ 69.  53. 112.] [ 68.  53. 112.] 
img=1 R:G:B=[157. 144. 102.] [157. 144. 102.] [157. 143. 101.] 
img=2 R:G:B=[ 60. 145. 116.] [ 36. 134. 102.] [ 36. 135. 103.] 
img=3 R:G:B=[238. 239. 238.] [153. 154. 153.] [68. 70. 67.] 
img=4 R:G:B=[254. 255. 255.] [254. 255. 255.] [254. 254. 254.] 
img=5 R:G:B=[239. 206. 213.] [239. 206. 213.] [239. 206. 213.] 
img=6 R:G:B=[77. 36. 17.] [77. 35. 16.] [76. 35. 15.] 
img=7 R:G:B=[201. 107.  87.] [191.  74.  45.] [187.  59.  24.] 
img=8 R:G:B=[254. 255. 255.] [254. 255. 239.] [254. 255. 217.] 
img=9 R:G:B=[254. 255. 255.] [254. 255. 255.] [254. 255. 255.] 
card=2
img=0 R:G:B=[254. 254. 183.] [254. 253. 183.] [254. 253. 183.] 
img=1 R:G:B=[174. 176. 176.] [174. 176. 176.] [174. 176. 176.] 
img=2 R:G:B=[200. 211. 156.] [200. 211. 157.] [200. 210. 156.] 
img=3 R:G:B=[200. 220. 245.] [199. 219. 245.] [199. 219. 245.] 
img=4 R:G:B=[251. 228. 233.] [250. 221. 228.] [249. 221. 228.] 
img=5 R:G:B=[190.  63.  25.] [190.  62.  24.] [190.  62.  23.] 
img=6 R:G:B=[ 39. 137. 107.] [ 39. 137. 107.] [ 39. 136. 106.] 
img=7 R:G:B=[169.  97.  45.] [169.  96.  44.] [169.  96.  43.] 
img=8 R:G:B=[163. 157. 187.] [163. 156. 187.] [163. 156. 187.] 
img=9 R:G:B=[43. 45. 43.] [26. 28. 24.] [24. 26. 22.] 
card=3
img=0 R:G:B=[161.  73.  34.] [160.  72.  33.] [160.  72.  33.] 
img=1 R:G:B=[254. 232. 209.] [254. 232. 209.] [254. 232. 209.] 
img=2 R:G:B=[41. 20. 78.] [40. 17. 77.] [39. 16. 76.] 
img=3 R:G:B=[253. 252. 166.] [253. 251. 164.] [253. 251. 164.] 
img=4 R:G:B=[173. 173. 172.] [171. 171. 170.] [171. 172. 170.] 
img=5 R:G:B=[184.  51.  17.] [185.  50.  14.] [184.  48.  12.] 
img=6 R:G:B=[241. 209. 215.] [241. 208. 214.] [241. 208. 214.] 
img=7 R:G:B=[37. 38. 34.] [35. 35. 31.] [33. 34. 29.] 
img=8 R:G:B=[230. 139.  45.] [229. 136.  38.] [229. 137.  38.] 
img=9 R:G:B=[191. 202. 142.] [189. 200. 138.] [190. 200. 138.] 
In [21]:
# 上で計算した結果に基づいて,データ辞書を作成

colors_dict = {
    0: {"RGB":[183,  51,  18], "Seq":97,  "label":"赤"},
    1: {"RGB":[252, 252, 252], "Seq":140, "label":"白"},
    2: {"RGB":[159,  73,  31], "Seq":158, "label":"茶色"},
    3: {"RGB":[178, 178, 178], "Seq":20, "label":"灰色"},
    4: {"RGB":[228, 139,  45], "Seq":81, "label":"オレンジ"},
    5: {"RGB":[241, 208, 215], "Seq":38, "label":"ピンク"},
    6: {"RGB":[ 31,  61, 129], "Seq":182, "label":"青"},
    7: {"RGB":[ 39, 134, 101], "Seq":2, "label":"緑"},
    8: {"RGB":[ 69,  53, 112], "Seq":56, "label":"紺"},
    9: {"RGB":[157, 144, 102], "Seq":64, "label":"金"},
    10:{"RGB":[ 68,  70,  67], "Seq":49, "label":"黒"},
    11:{"RGB":[ 76,  35,  15], "Seq":122, "label":"焦げ茶"},
    12:{"RGB":[254, 255, 217], "Seq":193, "label":"黄色"},
    13:{"RGB":[174, 176, 176], "Seq":115, "label":"銀色"},
#    14:{"RGB":[254, 255, 255], "Seq":115, "label":"銀色"},
    14:{"RGB":[200, 211, 156], "Seq":109, "label":"黄緑"},
    15:{"RGB":[199, 219, 245], "Seq":165, "label":"水色"},
    16:{"RGB":[163, 156, 187], "Seq":179, "label":"薄紫"},
    17:{"RGB":[254, 232, 209], "Seq":23, "label":"肌色"},
    18:{"RGB":[ 40,  17,  77], "Seq":143, "label":"紫"},
    19:{"RGB":[229, 137,  38], "Seq":76, "label":"黄土色"},
}
In [22]:
#colors_dict  # 表示させて確認
#colors_dict.keys()
In [23]:
# グラフ中の日本語がトーフになるので,その対策
import matplotlib.font_manager
fontprop = matplotlib.font_manager.FontProperties(fname="/Users/asakawa/Fonts/MS PGothic.ttf")
#fontprop = matplotlib.font_manager.FontProperties(fname="/Users/asakawa/Fonts/MS PMincho.ttf")
In [24]:
#print(Base_dir)
#print(color_basedir)
#print(image_basedir)
!ls /Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/*.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/001.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/002.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/003.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/004.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/005.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/006.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/007.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/008.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/009.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/010.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/011.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/012.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/013.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/014.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/015.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/016.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/017.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/018.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/019.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/020.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/021.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/022.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/023.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/024.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/025.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/026.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/027.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/028.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/029.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/030.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/031.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/032.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/033.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/034.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/035.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/036.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/037.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/038.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/039.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/040.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/041.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/042.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/043.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/044.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/045.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/046.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/047.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/048.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/049.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/050.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/051.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/052.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/053.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/054.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/055.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/056.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/057.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/058.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/059.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/060.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/061.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/062.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/063.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/064.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/065.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/066.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/067.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/068.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/069.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/070.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/071.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/072.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/073.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/074.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/075.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/076.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/077.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/078.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/079.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/080.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/081.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/082.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/083.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/084.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/085.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/086.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/087.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/088.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/089.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/090.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/091.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/092.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/093.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/094.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/095.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/096.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/097.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/098.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/099.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/100.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/101.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/102.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/103.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/104.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/105.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/106.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/107.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/108.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/109.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/110.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/111.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/112.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/113.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/114.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/115.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/116.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/117.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/118.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/119.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/120.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/121.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/122.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/123.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/124.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/125.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/126.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/127.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/128.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/129.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/130.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/131.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/132.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/133.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/134.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/135.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/136.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/137.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/138.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/139.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/140.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/141.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/142.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/143.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/144.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/145.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/146.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/147.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/148.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/149.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/150.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/151.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/152.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/153.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/154.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/155.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/156.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/157.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/158.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/159.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/160.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/161.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/162.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/163.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/164.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/165.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/166.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/167.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/168.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/169.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/170.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/171.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/172.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/173.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/174.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/175.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/176.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/177.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/178.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/179.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/180.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/181.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/182.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/183.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/184.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/185.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/186.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/187.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/188.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/189.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/190.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/191.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/192.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/193.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/194.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/195.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/196.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/197.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/198.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/199.png
/Users/asakawa/study/2020cnps_aphasia/TLPA_naming_images/200.png
In [25]:
#結果表示
fig, ax = plt.subplots(figsize=(10,14))
ax.axis('off')

# 画像格納用配列の準備
img = np.zeros_like(tlpa[1]['data'], dtype=np.uint8)

R, G, B = 0, 1, 2  # 色情報の格納位置

for k in colors_dict.keys():
    # パワーポイントファイルから書き出した画像情報に基づいて色情報データベースから色配列を作成
    img[:,:,R], img[:,:,G], img[:,:,B] = \
        colors_dict[k]['RGB'][R], colors_dict[k]['RGB'][G], colors_dict[k]['RGB'][B]

    # 色データの描画
    ax = fig.add_subplot(4, 5, k + 1)
    ax.set_axis_off()
    ax.imshow(img)
    ax.set_title('{0}: {1}'.format(colors_dict[k]['Seq'], colors_dict[k]['label']), 
                 fontdict = {"fontproperties": fontprop}, fontsize=12)
    
    # 色データを他の画像データと同じデータ内に保存
    colors_dict[k]['data'] = np.copy(img)
    Seq = colors_dict[k]['Seq']  # tlpa 番号の取得
    img_file = '{0:03d}.png'.format(Seq) # 書き出すファイル名を生成
    if tlpa[Seq]['Cat'] == 'C':
        if tlpa[Seq]['id'] != Seq:
            print('NG')
            sys.exit()
        tlpa[Seq]['data'] = np.copy(img)
        tlpa[Seq]['label'] = colors_dict[k]['label']
        tlpa[Seq]['file'] = img_file

    outfile = os.path.join(image_basedir,img_file)
    plt.imsave(outfile, tlpa[Seq]['data'])
    #print(outfile, tlpa[Seq]['Seq'], tlpa[Seq]['label'])
In [30]:
tlpa[2]['data'].shape
Out[30]:
(183, 114, 3)
In [31]:
#help(plt.imsave)
# 確認作業
plt.imshow(tlpa[2]['data'])
Out[31]:
<matplotlib.image.AxesImage at 0x7fe7588996d0>

手作業終わり


In [33]:
#len(tlpa)
#tlpa[2]['id']
In [34]:
# 結果の保存

# 画像 numpy.array を .npz ファイルに保存
np.savez_compressed('tlpa_imgs.npz', tlpa_imgs)

# 読み戻し
tlpa_imgs_ = np.load('tlpa_imgs.npz')['arr_0']

# 全データを json ファイルに保存
save_as_a_json(tlpa, 'tlpa.json')

# 全データを pickle ファイルに保存
with open('tlpa.pkl', 'wb') as f:
    pickle.dump(tlpa, f)
In [35]:
# グラフ中の日本語がトーフになるので,その対策
import matplotlib.font_manager
fontprop = matplotlib.font_manager.FontProperties(fname="/Users/asakawa/Fonts/MS PGothic.ttf")
#fontprop = matplotlib.font_manager.FontProperties(fname="/Users/asakawa/Fonts/MS PMincho.ttf")
In [36]:
def display_a_image(num=None, dic=tlpa):
    """
    画面に一枚の画像を表示する関数
    num: 指定がなければランダムに一枚の画像を提示
    """
    if num == None:
        [num] = np.random.randint(low=1,high=1+len(dic), size=1)
    else:
        if num > len(dic):
            print('num:{0} exceeded the size of dict {1}'.format(num, len(dic)))
            return

    fig, ax = plt.subplots(figsize=(3,6))
    ax.imshow(dic[num]['data'])
    ax.axis('off')
    ax.set_title('{0}: {1}'.format(num, dic[num]['label']), 
                 fontdict = {"fontproperties": fontprop}, fontsize=28)
    plt.show()

#num = 2
#display_a_image(num)
display_a_image()
In [37]:
#len(TLPA_imgs)
In [38]:
# 全データの表示    
fig = plt.figure(figsize=(16, 200))
for k in tlpa.keys():
    ax = fig.add_subplot(40, 5, k)  # 縦,横,通し番号 
    ax.set_axis_off()
    ax.imshow(tlpa[k]['data'])

    # タイトルを設定
    #s = "{0}: {1}".format(i+1,tlpa_feat[i+1]['Name'])
    s = "{0}: {1}({2})".format(k, #tlpa_data[k]['Seq'], 
                               tlpa[k]['label'],
                               tlpa[k]['file'])
    ax.set_title(s, fontdict = {"fontproperties": fontprop}, fontsize=14)

plt.show()    
In [ ]:
#type(TLPA_data)
#len(TLPA_data)
#TLPA_data.keys()
#type(TLPA_data[1])
#TLPA_data[2].keys()
tlpa.keys()
In [ ]:
num = 2
for k in tlpa[num].keys():
    if k is not 'data':
        print('{}: {},'.format(k, tlpa[num][k]), end=' ')

名詞図版の読み込みとデータの作成

In [ ]:
tlpa_nouns = ["手", "パイプ", "糸", "灯台", "窓", "地図", "卵", "槍", "電話", "竜巻",
 "先生", "海苔", "カメラ", "シューマイ", "スカート", "プロレス","馬", "ロケット", "手紙", "綱",
 "バナナ", "湖", "テレビ", "楽譜", "新聞", "屏風", "車", "らくだ", "病院", "パイナップル",
 "海", "塀", "太陽",  "算盤", "寿司", "水着","お金", "肘", "野球", "神主"]

TLPA_nouns_dict = {i+1:n for i, n in enumerate(tlpa_nouns)}
print(TLPA_nouns_dict)
In [ ]:
noun_images_basedir = os.path.join(BASE_DIR, 'TLPA_noun_images/')
path = glob.glob(os.path.join(noun_images_basedir,'53188-*.jpg'))

TLPA_noun_data = {}
max_width, max_height = 0, 0
for file in path:
    img = Image.open(file)
    width, height = img.size
    max_width = width if max_width < width else max_width
    max_height = height if max_height < height else max_height
    img = img.convert("RGB") if img.mode == "L" else img
    npimg = np.array(img, dtype=np.uint16)
    num = int(os.path.split(file)[-1].split('.')[0].replace('53188-','',1))
    TLPA_noun_data[num] = {'label':TLPA_nouns_dict[num], 
                           'data':npimg,
                           'file':file}

print('max_width:{0}, max_height:{1}, len(path):{2}'.format(max_width,max_height,len(path)))
tlpa_noun_imgs = np.ndarray((len(path),max_height, max_width,3), dtype=np.uint16)

for k in sorted(TLPA_noun_data.keys()):
    tlpa_noun_imgs[k-1] = np.copy(TLPA_noun_data[k]['data'])
In [ ]:
# 名詞図版データ結果の書き出し
tlpa_noun_data_pkl_file = 'tlpa_noun_data.pkl'
with open(tlpa_noun_data_pkl_file, 'wb') as f:
    pickle.dump(TLPA_noun_data, f)

# 上で書き出した結果を読み込んで確認
with open(tlpa_noun_data_pkl_file,'rb') as f:
    a = pickle.load(f)

print(a[1]['label'])
plt.imshow(a[1]['data'])
plt.show()
In [ ]:
        
num = 8
fig = plt.figure(figsize=(4,6)) # 横,縦の順
ax = fig.add_subplot(1,1,1)
ax.set_axis_off()
ax.imshow(TLPA_noun_data[num]['data'])
ax.set_title('{0}: {1}'.format(num, TLPA_noun_data[num]['label']), 
             fontdict = {"fontproperties": fontprop}, fontsize=24)
plt.imshow(TLPA_noun_data[num]['data'])
plt.show()
#plt.imshow(tlpa_noun_imgs[num-1]); plt.show()
In [ ]:
fig = plt.figure(figsize=(16, 64))
i = 1
for k in sorted(TLPA_noun_data.keys()):
    ax = fig.add_subplot(10, 5, i)  # 縦,横,通し番号 
    ax.set_axis_off()
    ax.imshow(TLPA_noun_data[k]['data'])
    
    # タイトルを設定
    ax.set_title('{0}: {1}'.format(k,TLPA_noun_data[k]['label']), 
                 fontdict = {"fontproperties": fontprop}, fontsize=24)
    i += 1

plt.show()    
In [ ]:
# 名詞図版画像データの書き出し
tlpa_noun_images_file = 'tlpa_noun_imgs.npz'
np.savez_compressed(tlpa_noun_images_file, tlpa_noun_imgs)
In [ ]:
# 上で書き出した結果の再読み込み表示
tlpa_nouns_imgs_ = np.load(tlpa_noun_images_file)['arr_0']

no = 10
print(tlpa_nouns[no])
plt.gray()
plt.imshow(tlpa_nouns_imgs_[no])
plt.show()

以上お疲れさまでした

In [ ]:
def gray2RGB(image_file):
    _a = Image.open(image_file)
    if _a.mode is "L":
        return _a.convert("RGB")
    else:
        return _a

def convertRGB(nparray):
    return np.asarray(Image.fromarray(nparray).convert("RGB"))