0

I am trying to write a small flask REST API wrapper around the openface api so that I can POST image URLs to my flask server and have it run a comparison of the image against a classifier model
app = Flask(__name__)
@app.route(‘/compare’, methods=[‘POST’])
def compare():
# create arguments object with default classifier and neural net
args = CompareArguments(image)
image = request.json[‘image’]
args.imgs = image
align = openface.AlignDlib(args.dlibFacePredictor)
net = openface.TorchNeuralNet(args.networkModel, imgDim=args.imgDim, cuda=args.cuda)
# call openface and compare image to classifier
infer(args, align, net)
return jsonify({‘image’: image}), 201

if __name__ == ‘__main__’:
app.run(host=’0.0.0.0′, threaded=True)

If I POST an image like so
curl -i -H “Content-Type: application/json” -X POST http://localhost:5000/compare -d ‘{“image”: [ “../images/examples/clapton-1.jpg”]}’

A new torch process is created and can be seen in the output from ps -aux, but seems to be blocked, as it doesn’t run until the server is reloaded
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 18184 3284 ? Ss 18:46 0:00 /bin/bash
root 188 3.5 2.4 676060 98320 ? S 19:35 0:00 python ./app.py
root 197 98.7 1.5 202548 62388 ? R 19:35 0:08 /root/torch/install/bin/luajit -e package.path=”/root/.luarocks/share/lua/5.1/?.lua;/root/.luarocks/share/lua/5.1/?/init.lua;/root/torch/install
root 211 39.2 1.5 202548 60908 ? R 19:36 0:01 /root/torch/install/bin/luajit -e package.path=”/root/.luarocks/share/lua/5.1/?.lua;/root/.luarocks/share/lua/5.1/?/init.lua;/root/torch/install

It seems like the torch process is being blocked by flask somehow? I have enabled threading and have tried increasing the number of processes. I’m not sure what could be blocking this process? Is there some way I can debug this or extra config required for threading in Flask?

Kuldeep Baberwal Changed status to publish February 17, 2025