如何解决Kivy Python FileChooser
我要创建一个文件选择器按钮,它将选择一个图像文件并在窗口上显示以对图像进行分类。
我只是用kivy python进行了图像识别,但是想添加一个按钮,用户可以在其中从自己的系统中选择图像文件。
请帮我,在下面的代码中添加filechooser按钮:
main.py文件:
import kivy.app
import Fruits
from kivy.uix.popup import Popup
from kivy.uix.tabbedpanel import TabbedPanel
from kivy.properties import ObjectProperty,StringProperty
from kivy.lang import Builder
class FirstApp(kivy.app.App):
def classify_image(self):
img_path = self.root.ids["img"].source
img_features = Fruits.extract_features(img_path)
predicted_class = Fruits.predict_output("c:\\Users\\aakip\\Documents\\Python\\face_recognition school project\\weights.npy",img_features,activation="sigmoid")
self.root.ids["label"].text = "Predicted Class : " + predicted_class
if __name__ == "__main__":
firstApp = FirstApp(title="Fruits 360 Recognition.")
firstApp.run()
Fruits.py:
import numpy
import PIL.Image
def sigmoid(inpt):
return 1.0/(1.0+numpy.exp(-1*inpt))
def relu(inpt):
result = inpt
result[inpt<0] = 0
return result
def predict_output(weights_mat_path,data_inputs,activation="relu"):
weights_mat = numpy.load(weights_mat_path,allow_pickle=True) #allow_pickle=True
r1 = data_inputs
for curr_weights in weights_mat:
r1 = numpy.matmul(r1,curr_weights)
if activation == "relu":
r1 = relu(r1)
elif activation == "sigmoid":
r1 = sigmoid(r1)
r1 = r1[0,:]
predicted_label = numpy.where(r1 == numpy.max(r1))[0][0]
class_labels = ["Apple","RaspBerry","Mango","Lemon"]
predicted_class = class_labels[predicted_label]
return predicted_class
def extract_features(img_path):
im = PIL.Image.open(img_path).convert("HSV")
fruit_data_hsv = numpy.asarray(im,dtype=numpy.uint8)
indices = numpy.load(file="c:\\Users\\aakip\\Documents\\Python\\face_recognition school project\\indices.npy")
#indices = numpy.load(file="indices.npy")
hist = numpy.histogram(a=fruit_data_hsv[:,:,0],bins=360)
im_features = hist[0][indices]
img_features = numpy.zeros(shape=(1,im_features.size))
img_features[0,:] = im_features[:im_features.size]
return img_features
.kv文件:
#:kivy 1.10.0
BoxLayout:
orientation: "vertical"
Label:
text: "Predicted Class Appears Here."
font_size: 30
id: label
BoxLayout:
orientation: "horizontal"
Image:
source: "apple.jpeg"
id: img
Button:
text: "Classify Image."
font_size: 30
on_press: app.classify_image()
<FileChoosePopup>:
title: "Choose a .jpeg File"
size_hint: .9,.9
auto_dismiss: False
BoxLayout:
orientation: "vertical"
FileChooser:
id: filechooser
FileChooserIconLayout
BoxLayout:
size_hint: (1,0.1)
pos_hint: {'center_x': .5,'center_y': .5}
spacing: 20
Button:
text: "Cancel"
on_release: root.dismiss()
Button:
text: "Load"
on_release: root.load(filechooser.selection)
id: ldbtn
disabled: True if filechooser.selection==[] else False
谢谢!
解决方法
您是否尝试查看Kivi文档? https://kivy.org/doc/stable/api-kivy.uix.filechooser.html
我相信这是您正在寻找的一部分。
class Root(FloatLayout):
loadfile = ObjectProperty(None)
def show_load(self):
content = LoadDialog(load=self.load,cancel=self.dismiss_popup)
self._popup = Popup(title="Load file",content=content,size_hint=(0.9,0.9))
self._popup.open()
def load(self,path,filename):
with open(os.path.join(path,filename[0])) as stream:
self.text_input.text = stream.read()
self.dismiss_popup()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。