J'ai pas encore tout compris. 
Ton application sera utilisée dans un intranet ou utilisable par internet ?
Car en général ce n'est pas conseillé qu'une base de données soit accessible directement depuis l'extérieur.
Puisque la reconnaissance de l'objet passe par la comparaison avec tous les autres produits (ou un sous-ensemble mais qui serait conséquent), j'aurai quasiment à retélécharger la base de donnée à chaque fois (ou en tout cas faire une requête pour chaque produit). C'est pour ça que je préfère l'avoir en local et la mettre à jour quand celle sur le serveur a été mise à jour (par l'ajout de nouveaux produits notamment).
La reconnaissance doit être effectuée côté client ?
Car tu pourrais la faire au moment où tu ajoutes / édites un produit. Ca éviterait de le faire sur chaque poste utilisateur (si j'ai bien compris ce que tu as expliqué).
De plus, il peut y avoir plusieurs utilisateurs qui utilisent le logiciel mais qui ne partagent pas le même inventaire et qui se foutent de l'inventaire du voisin. C'est pour cela que je ne peux pas intégrer l'inventaire dans la base de données.
Les utilisateurs ne sont pas authentifiés ? Car on pourrait imaginer que tu stockes en base, si tu est sur du nosql clé valeur par ex, l'id utilisateur + la liste des ids de produits (mais il faudrait que tes produits aient des ids uniques).
Et sinon tu pourrais ne stocker que les ids localement, soit dans du tinydb ou du sqlLite comme mentionné ci-dessus (mais encore une fois, il faudrait que tes produits aient des ids).
Mon avis (c'est comme ça que je l'aurais fait, pas forcément la meilleure solution) est que pour mener à bien ton projet, tu dois mettre en place un backend qui fait tout le traitement lors de l'ajout / édition de produit et qui mette à disposition des apis rest pour les récupérer.
Ton application cliente ne ferait que de la récupération de données sans réel traitement (à part la sauvegarde de l'inventaire en local ou dans la base).
Tu ne ferais ainsi les traitements que lorsque c'est nécessaire.
Et si tu veux du temps réel (mettre à jour l'interface client) : lorsque tu insères / édites les données, tu peux envoyer une notification a toutes les applications connectées à ton backend via socket.io https://python-socketio.readthedocs.io/en/latest/intro.html pour leur notifier de récupérer une nouvelle version des données affichées.