在我的python代码中,我正在预处理图像并将其提供给模型进行预测:
path = "/Users/iamreddy831/Desktop/ArchitecturalStyle_ML/FinalTests/testimage3.jpg"
styles = ["Baroque", "NeoClassical", "Gothic", "Modern", "Victorian"]
def read_image(file_path):
print("[INFO] loading and preprocessing image…")
image = load_img(file_path, target_size=(300, 300))
image = img_to_array(image)
image = np.expand_dims(image, axis=0)
image /= 255.
return image
def test_single_image(path):
styles = ["Baroque", "NeoClassical", "Gothic", "Modern", "Victorian"]
images = read_image(path)
time.sleep(.5)
bt_prediction = vgg19.predict(images)
tf.shape(bt_prediction)
preds = model.predict(bt_prediction)
for idx, styles, x in zip(range(0,7), styles, preds[0]):
print("ID: {}, Label: {} {}%".format(idx, styles, round(x*100,2) ))
print("Final Decision:")
time.sleep(.5)
for x in range(3):
print("."*(x+1))
time.sleep(.2)
class_predicted = np.argmax(model.predict(bt_prediction), axis=-1)
class_dictionary = generator_top.class_indices
inv_map = {v: k for k, v in class_dictionary.items()}
print("ID: {}, Label: {}".format(class_predicted[0], inv_map[class_predicted[0]]))
return load_img(path)
我如何在网页上运行这个python代码来预处理从页面输入的图像?我研究了Tensorflow.js并重新创建了工作流,但我认为是因为它依赖于应用程序。vgg19(存在于Tensorflow中,但不是Tensorflow.js)我必须创建一个python环境来做相同/类似的事情:
<script type="text/javascript">
async function run(){
const image = tf.browser.fromPixels(imgcanvas);
const batchedImage = languagePluginLoader.then(function () {
console.log(pyodide.runPython(`
import sys
sys.version
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import applications
tf.keras.applications.vgg19.preprocess_input(
image, data_format=None
`));
});
const MODEL_URL = 'web_model/model.json';
const model = await tf.loadGraphModel(MODEL_URL);
const result = model.predict(batchedImage);
result.print();
run();
</script>
在这种情况下我是否正确使用Pyodide ?当我尝试执行这个live时,我总是遇到语法错误。或者有没有更简单的方法来解决这个问题?重塑是相当复杂的,一个[- 1,9,9,512]数组依赖于卷积层。
您的一般方法看起来是正确的(不确定为什么会出现语法错误),但是一个主要限制是您只能导入带有为pyodide构建的C扩展的包。Tensorflow不在列表中,考虑到它相当复杂,并且有一长串依赖项,它不太可能很快被添加到列表中。
因此您将无法在pyoide中导入tensorflow或keras。如果您需要的只是应用tf.keras.applications.vgg19。Preprocess_input,你可以接受这个函数并将其改编为纯numpy,如果你直接在pyoide中定义它,它应该可以工作。
关于语法错误,也许可以尝试逐步删除代码行,直到它能够识别问题。