質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

1回答

961閲覧

kivy canvas画像が表示されなかった原因

BlueBits

総合スコア57

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2018/07/09 10:14

編集2018/07/22 15:42

表示されなかったは判明しました。ただそれがなぜ影響したかがよくわかりません
(追記 原因は回答内のコメントに記載)
以下のRaspberryPi3環境にpython、Kivyを入れています。
(一部省略しています)

$python -V Python 2.7.13 $pip list Package Version ------------- ----------- certifi 2018.4.16 chardet 3.0.4 cryptography 1.7.1 Cython 0.28.3 docutils 0.14 enum34 1.1.6 idna 2.7 ipaddress 1.0.17 keyring 10.1 keyrings.alt 1.3 Kivy 1.11.0.dev0 Kivy-Garden 0.1.4 libusb1 1.6.4 ndeflib 0.3.2 pip 10.0.1 pyasn1 0.1.9 pycrypto 2.6.1 pyDes 2.0.1 Pygments 2.2.0 pygobject 3.22.0 pyserial 3.4 pyxdg 0.25 requests 2.19.1 RPi.GPIO 0.6.3 SecretStorage 2.3.1 setuptools 33.1.1 six 1.10.0 urllib3 1.23 wheel 0.29.0

上記の環境で以下のpythonファイルを動作させました。
main.kv

kivy

1#:kivy 1.11 2#-*- coding: utf-8 -*- 3#:import kivy kivy 4FloatLayout: 5 canvas: 6 Rectangle: 7 source:'./bg_1900x1200.png' 8 size: self.size 9 Label: 10 text_size: self.size 11 font_size: 24 12 text: 'Ver0.0.1' 13 valign: 'middle' 14

main.py

python

1#-*- coding: utf-8 -*- 2from kivy.app import App 3 4class MainApp(App): 5 pass 6 7MainApp().run()

このプログラムを実行すると、同一フォルダにあるbg_1900x1200.png(W1900xH1200)画像が表示されるはずです。しかしながら表示されず黒背景になりました。
また、MacBook環境(python 2.7.15,Kivy 1.11.0.dev0)では表示されました。

結果1

画像サイズ 1369x864サイズ以下では表示されました。
また、縦X横のピクセル内であれば表示されました。(1400x 840など)

結果2

main.kvの Label:text_size: self.size がおかしかった
text_size項目の削除、もしくはself.sizeー>self.width,Noneに変更

ご質問

最終的に、text_size項目の設定が不適切だったという考えなのですが
どんな風に作用して表示されなかったのかわかりますでしょうか?
・MacBook環境で表示された理由(pythonバージョンの違いも予測されます)

今後、作っていく上で注意する要素かどうか判別したいです。

追記 2018/7/12

回答いただいた内容通りRaspberryの性能の原因が大きそうです。
OpenGL部分のログです。

MacBook

[INFO ] [GL ] Using the "OpenGL ES 2" graphics system [INFO ] [GL ] Backend used <gl> [INFO ] [GL ] OpenGL version <2.1 INTEL-10.34.27> [INFO ] [GL ] OpenGL vendor <Intel Inc.> [INFO ] [GL ] OpenGL renderer <Intel(R) Iris(TM) Graphics 6100> [INFO ] [GL ] OpenGL parsed version: 2, 1 [INFO ] [GL ] Shading version <1.20> [INFO ] [GL ] Texture max size <16384> [INFO ] [GL ] Texture max units <16>

Raspberry

[INFO ] [GL ] Using the "OpenGL ES 2" graphics system [INFO ] [GL ] Backend used <gl> [INFO ] [GL ] OpenGL version <OpenGL ES 2.0> [INFO ] [GL ] OpenGL vendor <Broadcom> [INFO ] [GL ] OpenGL renderer <VideoCore IV HW> [INFO ] [GL ] OpenGL parsed version: 2, 0 [INFO ] [GL ] Shading version <OpenGL ES GLSL ES 1.00> [INFO ] [GL ] Texture max size <2048> [INFO ] [GL ] Texture max units <8>

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

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

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

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

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

guest

回答1

0

ベストアンサー

多分、大きなTextureを作り過ぎてRaspberryPiの能力の限界に達したんじゃないかと思います。結果1はもちろん結果2もそれを思わせるので。

Labelは内部で文字列の描かれたTextureを作るのですが、既定ではそのTextureは文字列が収まるだけの最小限の大きさになってます。ただtext_sizeが指定されているとTextureの大きさはその値に必ず従います。なのでtext_size: self.sizeLabelの大きさと同じ大きさでTextureを作るよう指示した事になります。そしてLabelの大きさなんですが、プログラムをFullscreenで実行しているならおそらくRaspberryPiのDisplayと同じになっているので、結果RaspberryPiのDisplayと同じ大きさのTextureを作るように指示した事になり、能力の限界に達したと私は考えてます。

self.width,Noneで上手くいったのも、これによってTextureの高さが文字列が収まる最小限の大きさになり、RaspberryPiの限界に達しなくなったと考えるとつじつまが合います。

もしLabelの文字列の位置揃えをしたいが為にtext_sizeをいじっているのならやめた方がいいかもしれません。上に書いたように無駄に大きなTextureを作ってしまうので。代わりに以下の様にLabelAnchorLayoutの中に入れるのをお薦めします。

FloatLayout: AnchorLayout: anchor_x: 'right' anchor_y: 'center' Label: size: self.texture_size size_hint: None, None font_size: 24 text: 'Ver0.0.1'

投稿2018/07/11 23:19

編集2018/07/11 23:50
gottadiveintopy

総合スコア736

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

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

BlueBits

2018/07/11 23:29

ありがとうございます。あのあと色々調べて他の場合にも発生(大きな画像の複数枚使用など)を確認しました。 調べた結果詳細まで突き止めませんでしたが概ねその通りのようです。 (追記でOpenGLのMac,RaspberryPの差を明記します。) 一応、対策の1つに ImageWidgetに、nocache=Trueを入れると表示されました。 AnchorLayoutにしてみます。
BlueBits

2018/07/11 23:39

すみません。まだ編集中なのにベストアンサーにしてしまいました。
gottadiveintopy

2018/07/11 23:52 編集

いえいえ。 なるほどnocacheは知らなかったです。
BlueBits

2018/07/12 00:05

ありがとうございました。 LabelWidgetを使用する際はTextureサイズを意識して使用するようにいたします。 Mac環境は乱暴に設定したけど、性能面で助かったということですね。
BlueBits

2018/07/12 07:04

ありがとうございます。最近pyton,kivyを始めたばっかでしたので知りませんでした。ありがとうございます。Texture調べるときに半透明のcanvasで表示すればいいとおもっていました。
BlueBits

2018/07/18 23:14

追記です。GUIに設定したメモリが少なすぎました、 raspi-configであげたところnocacheなしでも大丈夫でした。 cache化しようにもメモリが足りなすぎてという感じでしょうか。。
gottadiveintopy

2018/07/19 13:01 編集

そう思います。 話は変わるんですが、他の質問の時も思ったのですが、何でも調べて対処するのが速いですね。多分プログラミングを仕事にされてるのでしょうか
BlueBits

2018/07/20 05:24

独学でやっているせいか、突っかかることが多く調べる癖があるからでしょうか?仕事は簡単なプログラミング関連ならありますが専門ではありません。
gottadiveintopy

2018/07/20 06:48

なるほど。その調べる癖のおかげでこちらも勉強になりました。(特にClockの幾つかのMethodがMultiThread対応である事を知れたのは大きいです)。ありがとう
BlueBits

2018/07/20 08:06

こちらこそありがとうございました。先人の知恵ありきでやっていますので非常に助かっております。 今も思いつきでLive2Dみたいなことをkivyできないかと考えていたら、spineがあるのを知って食指が動いています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問