🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

font

近年は、コンピュータ上、紙面上で利用できる書体データのことをfontといいます。数える時の単位は「書体」で、データとしてのフォントは、デジタルフォントと呼ばれる場合があります。 HTML/CSSでは要素を指定し、フォント情報を調整することができます。

Q&A

解決済

1回答

6768閲覧

WordCloudsで日本語フォントを読み込もうとすると”cannot open resource"エラーになる

sakihokusho

総合スコア0

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

font

近年は、コンピュータ上、紙面上で利用できる書体データのことをfontといいます。数える時の単位は「書体」で、データとしてのフォントは、デジタルフォントと呼ばれる場合があります。 HTML/CSSでは要素を指定し、フォント情報を調整することができます。

0グッド

0クリップ

投稿2020/12/17 21:02

前提・実現したいこと

日本語歌詞をスクレイピングで収集し、形態素解析した上で(ここまでは成功しています)、WordCloudsを用いて頻出ワードを可視化しようとしています。
WordCloudsを作成する過程で日本語フォントのPathを渡そうとしたところ、表題の通り”cannot open resource"とエラーが表示されてしまいます。
下記の通り、ターミナルで該当のフォント自体の存在を確認出来たので、なぜ上手く読み込めないのか分からず、困っております。

参考にしたサイト:https://qiita.com/yuuuusuke1997/items/122ca7597c909e73aad5

発生している問題・エラーメッセージ

OSError Traceback (most recent call last) <ipython-input-18-f96c1871b543> in <module> 13 stop_words = ['そう', 'ない', 'いる', 'する', 'まま', 'よう', 'てる', 'なる', 'こと', 'もう', 'いい', 'ある', 'ゆく', 'れる'] 14 ---> 15 wordcloud = WordCloud(background_color='white', font_path=font, width=800, height=600, stopwords=set(stop_words)).generate(text) 16 #wordcloud = WordCloud(background_color='white', width=800, height=600, stopwords=set(stop_words)).generate(text) 17 ~/conda/envs/python/lib/python3.6/site-packages/wordcloud/wordcloud.py in generate(self, text) 569 self 570 """ --> 571 return self.generate_from_text(text) 572 573 def _check_generated(self): ~/conda/envs/python/lib/python3.6/site-packages/wordcloud/wordcloud.py in generate_from_text(self, text) 551 """ 552 words = self.process_text(text) --> 553 self.generate_from_frequencies(words) 554 return self 555 ~/conda/envs/python/lib/python3.6/site-packages/wordcloud/wordcloud.py in generate_from_frequencies(self, frequencies, max_font_size) 403 else: 404 self.generate_from_frequencies(dict(frequencies[:2]), --> 405 max_font_size=self.height) 406 # find font sizes 407 sizes = [x[1] for x in self.layout_] ~/conda/envs/python/lib/python3.6/site-packages/wordcloud/wordcloud.py in generate_from_frequencies(self, frequencies, max_font_size) 437 while True: 438 # try to find a position --> 439 font = ImageFont.truetype(self.font_path, font_size) 440 # transpose font optionally 441 transposed_font = ImageFont.TransposedFont( ~/conda/envs/python/lib/python3.6/site-packages/PIL/ImageFont.py in truetype(font, size, index, encoding, layout_engine) 834 835 try: --> 836 return freetype(font) 837 except OSError: 838 if not isPath(font): ~/conda/envs/python/lib/python3.6/site-packages/PIL/ImageFont.py in freetype(font) 831 832 def freetype(font): --> 833 return FreeTypeFont(font, size, index, encoding, layout_engine) 834 835 try: ~/conda/envs/python/lib/python3.6/site-packages/PIL/ImageFont.py in __init__(self, font, size, index, encoding, layout_engine) 192 return 193 self.font = core.getfont( --> 194 font, size, index, encoding, layout_engine=layout_engine 195 ) 196 else: OSError: cannot open resource

該当のソースコード

from wordcloud import WordCloud text_file = open('perfume_list.txt', encoding='utf-8') text = text_file.read() from PIL import Image, ImageDraw, ImageFont #日本語のフォントパス font = '/System/Library/Fonts/Hiragino Sans W3' #font = ImageFont.truetype("/System/Library/Fonts//Hiragino Sans GBW32.png", 14) #無意味そうな単語除去 stop_words = ['そう', 'ない', 'いる', 'する', 'まま', 'よう', 'てる', 'なる', 'こと', 'もう', 'いい', 'ある', 'ゆく', 'れる'] wordcloud = WordCloud(background_color='white', font_path=font, width=800, height=600, stopwords=set(stop_words)).generate(text) #wordcloud = WordCloud(background_color='white', width=800, height=600, stopwords=set(stop_words)).generate(text) #画像はwordcloud.pyファイルと同じディレクトリにpng保存 wordcloud.to_file('./wordcloud_p.png')

試したこと

上記のソースコードでは font = '/System/Library/Fonts/Hiragino Sans W3' で実行していますが、
’/Users/ユーザー名/Library/Fonts/ヒラギノ角ゴシック W3.ttc’
’/System/Library/Fonts/ヒラギノ角ゴシック W3.ttc’
を試しても同様のエラーコードとなります。
ImageFontをインポートして’font = ImageFont.truetype("/System/Library/Fonts//Hiragino Sans GBW32.png", 14)’を実行してみましたが、やはり同じエラーに行き着きます。

補足情報(FW/ツールのバージョンなど)

ターミナルで’% find /System/Library/Fonts’でフォント一覧を出したところ、’/System/Library/Fonts/ヒラギノ角ゴシック W3.ttc’が存在している事は確認しております。

macOS Catalina Version 10.15.3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2020/12/18 02:42 編集

Osaka.ttf でもやってみるとか (もちろんFontBookでパス調べて)
sakihokusho

2020/12/18 17:47

ツールチップを見たところ、’/Users/ユーザー名/Library/Fonts/ヒラギノ角ゴシック W3.ttc’がパスになっていたので、結果変わらずでした… Osaka.ttfもパスを調べてやってみましたが、変わらずcannot open resourceとなりました。
sakihokusho

2020/12/18 22:07

Macbook側で何か設定を変更する必要があるのでしょうか。 試しに他のフォントでも試してみましたが、いずれもcannot open resourceとなってしまいました。
jbpb0

2020/12/19 12:49

質問のコードのフォントの指定のみ下記のように変えてmacで実行してみたら、エラーにならず、日本語が書かれた画像ファイルが作成されました font = '/System/Library/Fonts/ヒラギノ角ゴシック W4.ttc' Python 3.7.5 pillow 6.2.1 wordcloud 1.8.1
sakihokusho

2020/12/23 19:29

お返事大変遅くなり失礼しました。 !pip listで見てみると、Pillow 8.0.1となっておりました。 また追記頂いたリンク先のコード、font = '/System/Library/Fonts/ヒラギノ角ゴシック W4.ttc'も試しましたが、いずれもcannot open resourceとなりました。
sakihokusho

2020/12/23 19:39

その他バージョンも追記いたします。 Python 3.6.12 wordcloud 1.4.1
jbpb0

2020/12/23 21:33

表示させる文字を半角英数字だけにして、英語フォントを指定したら、どうなるのでしょうか?
sakihokusho

2020/12/23 21:38

text内を半角英数字、フォントを'/Users/ユーザー名/Library/Fonts//Arial.ttf'で実行してみたところ、同じくcannot open resourceとなりました。
sakihokusho

2020/12/23 21:40

コードはこちらになります。 # -*- coding:utf8 -*- import numpy as np from PIL import Image, ImageDraw, ImageFont def draw_txt(background, word, f_path, t_size , t_color, t_cood,t_pad): # フォント設定 font = ImageFont.truetype(f_path, t_size) # テキスト入力用クラス宣言 draw = ImageDraw.Draw(background) # 背景に書き込み cnt = 0 for y in range(t_cood[0], background.size[1]-t_cood[0], t_size+t_pad[0]): for x in range(t_cood[1], background_size[0]-t_cood[1], t_size+t_pad[1]): if len(word) > cnt: draw.text((x,y), word[cnt], font=font, fill=t_color) else: break cnt += 1 return background if __name__ == "__main__": # 背景作成 background_size = (320,240) background_color = (0,0,0,255) background = Image.new('RGBA', background_size, background_color) #テキスト指定 word = str(np.genfromtxt('word.txt', delimiter=',', dtype=np.str)) font_path = '/Users/sakikawamura/Library/Fonts//Arial.ttf' text_size = 20 text_color = (180,180,180,255) #y,x text_coordinate = (20,20) text_padding = (10,0) draw_img = draw_txt(background, word, font_path, text_size, text_color, text_coordinate, text_padding) #画像指定 draw_img.show() #画像保存 save_path = './text.png' draw_img.save(save_path) エラーはこの通りでした。 --------------------------------------------------------------------------- OSError Traceback (most recent call last) <ipython-input-10-49dad6f8ae2f> in <module> 33 text_coordinate = (20,20) 34 text_padding = (10,0) ---> 35 draw_img = draw_txt(background, word, font_path, text_size, text_color, text_coordinate, text_padding) 36 #画像指定 37 draw_img.show() <ipython-input-10-49dad6f8ae2f> in draw_txt(background, word, f_path, t_size, t_color, t_cood, t_pad) 5 def draw_txt(background, word, f_path, t_size , t_color, t_cood,t_pad): 6 # フォント設定 ----> 7 font = ImageFont.truetype(f_path, t_size) 8 # テキスト入力用クラス宣言 9 draw = ImageDraw.Draw(background) ~/conda/envs/python/lib/python3.6/site-packages/PIL/ImageFont.py in truetype(font, size, index, encoding, layout_engine) 834 835 try: --> 836 return freetype(font) 837 except OSError: 838 if not isPath(font): ~/conda/envs/python/lib/python3.6/site-packages/PIL/ImageFont.py in freetype(font) 831 832 def freetype(font): --> 833 return FreeTypeFont(font, size, index, encoding, layout_engine) 834 835 try: ~/conda/envs/python/lib/python3.6/site-packages/PIL/ImageFont.py in __init__(self, font, size, index, encoding, layout_engine) 192 return 193 self.font = core.getfont( --> 194 font, size, index, encoding, layout_engine=layout_engine 195 ) 196 else: OSError: cannot open resource
jbpb0

2020/12/23 21:41

つまり、日本語に限らず、pillowでのフォント指定が全くできない、という状態ですね
sakihokusho

2020/12/23 21:43

そのようです…。 並行してGoogleで調べ回っていますが、何が起きているのかよくわかっていません…
jbpb0

2020/12/23 21:52

Arial.ttf の左の // を / に変えてもダメですか?
sakihokusho

2020/12/23 21:53

今試してみましたが、変わりませんでした。
jbpb0

2020/12/23 22:49 編集

フォントのファイルをpythonのファイルと同じフォルダにコピーして、フォントの指定を ./フォントファイル名 としてみてください “./Arial.ttf“ みたいに
sakihokusho

2020/12/23 23:34

font = './Users/sakikawamura/opt/anaconda3/lib/python3.7/site-packages/numexpr/ヒラギノ角ゴシック W4.ttc' で実行しましたが、変わらずでした。 font = './ヒラギノ角ゴシック W4.ttc' も試しましたが、変わらずです…
sakihokusho

2020/12/24 01:30

恥ずかしながら…、anaconda Navigatorをもう一度立ち上げ直して実行してみたらうまく行きました。 丁重にご指示頂きありがとうございます。
jbpb0

2020/12/24 01:33

えっと、どの状態でうまくいったのでしょうか? フォントをコピーして、フォントの指定のやり方を変えた状態? それとも、全く元々のコードのまま?
sakihokusho

2020/12/24 01:36

元々のコードのままでうまく行きました…
jbpb0

2020/12/24 01:39

そうなんですね 最初に質問する前から、さきほどまでAnaconda Navigatorはずっと起動したままだったのでしょうか?
sakihokusho

2020/12/24 01:42

していたはずですが、パソコン含め全て再起動した結果うまく行ったような感じです。 色々お調べ頂いたのになんだか申し訳ないです…
jbpb0

2020/12/24 01:52

うまくいかなくなるちょっと前に、Anacondaのパッケージのアップデートをしていたら、再立ち上げするまでは、何かがおかしくなる場合があります 使用中のファイルは更新できないため、OSを再立ち上げしてやっとアップデートが全部完了するのかな、と思ってます 滅多にそんなこと起きませんけど
sakihokusho

2020/12/24 01:57

環境設定と言いますか、OSの仕様回りに非常に疎いので勉強になります。 今後はエラーが起きたらまずは再起動してみます。
guest

回答1

0

自己解決

anaconda Navigatorを立ち上げし直した結果、コードがうまく機能しました。

投稿2020/12/24 01:31

sakihokusho

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問