Files
alibaba--mnn/tools/script/modelTestForAndroid.py
2026-07-13 13:33:03 +08:00

104 lines
4.1 KiB
Python
Executable File

#!/usr/bin/python
#-- coding:utf8 --
import os
import sys
def run_cmd(args):
cmd = args[0]
for i in range(1, len(args)):
cmd += ' ' + args[i]
stdout = os.popen(cmd).read()
return stdout
gWrong = []
gRight = 0
serial = ''
# serial='-s 30.x.x.x:x' # Specify test phone ip address
def test(model_root_dir, parameters):
global gRight
print("all parameters: ", parameters)
root_dir = model_root_dir + '/TestResource'
print('root: ', root_dir)
for name in os.listdir(root_dir):
if name == '.DS_Store':
continue
modelName = os.path.join(root_dir, name, 'temp.bin')
inputName = os.path.join(root_dir, name, 'input_0.txt')
outputName = os.path.join(root_dir, name, 'output.txt')
print(modelName)
run_cmd(['adb', serial, 'push', modelName, '/data/local/tmp/MNN/temp.bin'])
run_cmd(['adb', serial, 'push', inputName, '/data/local/tmp/MNN/input_0.txt'])
run_cmd(['adb', serial, 'push', outputName, '/data/local/tmp/MNN/output.txt'])
message = run_cmd(['adb', serial, 'shell', '\"cd /data/local/tmp/MNN&&export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH && ./testModel.out temp.bin input_0.txt output.txt %s\"' %(parameters)])
print(str(message))
if (message.find('Correct') < 0):
gWrong.append(modelName)
else:
gRight += 1
root_dir = model_root_dir + '/OpTestResource'
print('root: ', root_dir)
for name in os.listdir(root_dir):
if name == '.DS_Store':
continue
modelName = os.path.join(root_dir, name, 'temp.bin')
inputName = os.path.join(root_dir, name, 'input_0.txt')
outputName = os.path.join(root_dir, name, 'output_0.txt')
print(modelName)
run_cmd(['adb', serial, 'push', modelName, '/data/local/tmp/MNN/temp.bin'])
run_cmd(['adb', serial, 'push', inputName, '/data/local/tmp/MNN/input_0.txt'])
run_cmd(['adb', serial, 'push', outputName, '/data/local/tmp/MNN/output_0.txt'])
message = run_cmd(['adb', serial, 'shell', '\"cd /data/local/tmp/MNN&&export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH && ./testModel.out temp.bin input_0.txt output_0.txt %s\"' % (parameters)])
print(message)
if (message.find('Correct') == -1):
gWrong.append(modelName)
else:
gRight += 1
# total model test
root_dir = os.path.join(model_root_dir, 'TestWithDescribe')
print('Model Root Path: ' + root_dir + '\n')
for name in os.listdir(root_dir):
if name == '.DS_Store':
continue
modelDir = os.path.join(root_dir, name)
modelName = os.path.join(modelDir, 'temp.bin')
if not os.path.exists(modelName):
continue
print(run_cmd(['adb', serial, 'push', modelDir, '/data/local/tmp/MNN/']))
print(modelDir)
print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Running...")
message = run_cmd(['adb', serial, 'shell', '\"cd /data/local/tmp/MNN&&export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH && ./testModelWithDescribe.out %s/temp.bin %s/config.txt %s\"' %(name, name, parameters)])
run_cmd(['adb', serial, 'shell', 'rm -rf /data/local/tmp/MNN/%s'%(name)])
if (message.find('Correct') == -1):
gWrong.append(modelDir)
else:
gRight += 1
print(message)
print('Wrong: ', len(gWrong))
for w in gWrong:
print(w)
def android_test(root_dir, forwardType, thredhold, bits):
test(root_dir, str(forwardType) + str(thredhold))
print("TEST_NAME_MODEL%d: 模型测试%d\nTEST_CASE_AMOUNT_MODEL%d: {\"blocked\":0,\"failed\":%d,\"passed\":%d,\"skipped\":0}\n"%(bits, bits, bits, len(gWrong), gRight))
if __name__ == '__main__':
root_dir = sys.argv[1]
forwardType = " 0 "
if len(sys.argv) > 2:
forwardType = ' ' + sys.argv[2] + ' '
thredhold = ' 0.001 '
if len(sys.argv) > 3:
thredhold = ' ' + sys.argv[3] + ' '
precision = ' 1 '
if len(sys.argv) > 4:
precision = ' ' + sys.argv[4] + ' '
input_dims = ''
if len(sys.argv) > 5:
input_dims = ' ' + sys.argv[5] + ' '
test(root_dir, forwardType + thredhold + precision + input_dims)