在Javascript环境中复制用于Tensorflow图像预处理的Python工作流



在我的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中定义它,它应该可以工作。

关于语法错误,也许可以尝试逐步删除代码行,直到它能够识别问题。

相关内容

  • 没有找到相关文章