← back to Dw Photo Capture

visual-search/__pycache__/search_service.cpython-314.pyc

141 lines

+
��Oj�4��:�^RIt^RIt^RIt^RIt^RIt^RIt^RIHtHt^RI	t
^RIt^RIH
t
]PR,t]!]PP#RR44tRRRR/tR	t]P*!4tR
RR.R^R
^R/R.R./tRtR0R+mR0R,mR0R-mRRR0R0R.mRRR0RRR0RRR0RRR0RRR0RR0R0R/mRRR0RR0/tR tR!t!R"R#]4t]R$8Xd;]!4]!R%]R&]R
,R'2R(R)7]!R*]3]4P?4R#R#)0�N)�BaseHTTPRequestHandler�ThreadingHTTPServer)�Image�
DW_UNIFIED_DB�VS_PORT�9914�model�
preprocessc���\R,Ef8^RIp^RIp\RRR7VP	RRR7wr#p\
PP\
PP\
PP\44R	4p\
PPV4'd3VPVPVR
R7RR
7\RVRR7VP4VP\!^\
P"!4^,
44W$u\R&\R&\R,\R,3#)z�Load CLIP on first /search only. Uses the SAME weights (ViT-B-32/laion2b + optional
dw_clip_ft.pt) the catalog was embedded with, so re-embedded photos share the catalog's space.r	Nuloading CLIP…T��flushzViT-B-32�laion2b_s34b_b79k)�
pretrainedz
dw_clip_ft.pt�cpu)�map_locationF)�strictz"loaded fine-tuned DW CLIP weights:r
)�_MODEL�torch�	open_clip�print�create_model_and_transforms�os�path�join�dirname�abspath�__file__�exists�load_state_dict�load�eval�set_num_threads�max�	cpu_count)rrr	�_r
�_fts      �visual-search/search_service.py�
_get_modelr(s����g����
��t�,�(�D�D�Z�\o�D�p���*��g�g�l�l�2�7�7�?�?�2�7�7�?�?�8�+D�E��W��
�7�7�>�>�#����!�!�%�*�*�S�u�*�"E�e�!�T��6��4�H�
�
�
��e�+�+�C��2�<�<�>�A�3E�,F�G�05�-��w����-��'�?�F�<�0�0�0��M�meta�	loaded_at�n�sku_ix�fam�stylesc��V'gR#VP4PR4p\V4^8XdRPRV44p\V4^8dR#\	VR,^4R,\	VR,^4R,\	VR,^4R,rCp\
Y#T4\Y#T4reYV,
pYV,R,pT^8XdR	MN^\^T,^,
4,
'd(T^\^T,^,
4,
,MR	p	R	p
T^8wdfYR8Xd^<Y4,
T,^,,p
MAYS8Xd^<YB,
T,^,,p
M^<Y#,
T,^,,p
T
^8d
T
R
,
p
T	R8d1TR8�dR
#TR8dR#^T
u;8:d^F8:dMR#TR8�dR#R#TR8�d^T
u;8:d	^F8dR#TR8d"T	R8d^
T
u;8:d^F8g
MT
R8�dR#TR8dR#T
^8gT
R8�dR#T
^(8dT	R8d
TR8�dR#R#T
^78dT	R8dR#T
^28dR#R#T
^A8dTR8dR#R#T
^�8dR#T
^�8dR#T
^�8dR #T
R!8dR"#R## \
dR#i;i)$N�#�c3�2"�TF
q^,x�K	R#5i)�N�)�.0�cs& r'�	<genexpr>�#_family_from_hex.<locals>.<genexpr>-s���/�Q��!���Q�s�:rr5Ng�o@:r5�N:r;�Ng@�ihg
ףp=
�?g��Q���?�white�blackg333333�?�beige�grayg�������?g�������?g�?iY�browng{�G�z�?�redg�������?g�������?�orange�gold�yellow�green�teal�bluei"�purple�pink)	�strip�lstrip�lenr�int�
ValueErrorr#�min�abs)�hex_str�h�r�g�b�mx�mn�d�l�s�hds&          r'�_family_from_hexr^*sT���4��
�
����s�#�A�
�1�v��{����/�Q�/�/�A�
�1�v��z�$���a��f�R�.��&��A�c�F�2��u�(<�c�!�C�&��n�U�>R�a����Q�Z��Q������Q�	����A��A�v���#�a��c�!�e�*���1�a��A�a�C��E�
�l�+�3�A�	�B��A�v�
�7�2���a��1�}�-�b�
�W�2���a��1�}�-�b����a��1�}�-�b�	�A�v�r�S�y�r��4�x��t�8�G��t�8�G�
��>�r�>�� �$�h�w���4�x�B�"�M�r�M�'�M��4�x�A��H�2��=�b�=�R�3�Y���4�x��	�B�w�"��)�E�	�B�w�A��H��T���H��H�	�B�w�1�t�8��R�B��G�&�R��R�	�B�w�1�t�8��9��9�	�C�x��	�C�x��	�C�x��	�C�x����7����s�%A
J3�3K�Kr@rBrEr>rArDrFrCrKrJrIrHrGr?c�<�\P!\4qP4pVP	R4..../3wr#rEpVEF)w
rxr�r�r�pp\V4pVP
\P!\V
4RR74VP
RVRVRV	RV
RVRVR	V/4VP
\V44\4pV'dp\V\4'dTM\P!V4pVUu0uF4pV'gK
\!V4P#4P%4kK6	ppVP
V4V'gEKW�9gEK%VWh&EK,	VP)4VP)4V'd&\P*!V4P-R4M\P.!RR4p\0;_uu_4V\2R
&V\2R&\4P4!4\2R&\V4\2R
&V\2R&V\2R&V\2R&RRR4\7R\V4R\V4R2RR7R#uupi \&dEL?i;i +'giLO;i)a�select e.vc_id, e.dw_sku, e.mfr_sku, e.vendor_code, e.pattern_name, e.image_url,
                          e.embedding, v.dominant_color_hex, v.ai_styles, sp.handle
                   from image_embeddings e
                   left join vendor_catalog v on v.dw_sku = e.dw_sku
                   left join shopify_products sp on sp.dw_sku = e.dw_sku
                   where e.embedding is not null�float32)�dtype�vc_id�dw_sku�mfr_sku�vendor�pattern�image�handler*r+r,r-r.r/r0Nzloaded u embeddings · z
 skus indexedTr)ri)�psycopg2�connect�DB�cursor�executerN�append�np�
frombuffer�bytesr^�set�
isinstance�list�json�loads�strrL�lower�	Exception�close�vstack�astype�zeros�LOCK�STATE�timer)�conn�cur�vecsr+r/r0r.rbrc�mfr�vc�pat�url�emb�hexc�	ai_stylesrh�i�sset�arr�xr*s                      r'r r Xs�����B��D�{�{�}���K�K�4�5�')�"�b�"�b�&8�#�D��V�JM�F��s��#�Y����I�����B�M�M�%��*�I�>�?����W�e�X�v�y�#�x�QS�U^�`c�el�nq�s{�~D�E�	F��
�
�#�D�)�*��u���
�#-�i��#>�#>�i�D�J�J�y�DY��8;�A��1�q�.��A�����,�,�.���A�	�
�
�d���6�f�*��F�N�KN� �I�I�K�����-1��	�	�$����y�)�r�x�x��)�7T�A�	
����c�
���f�
�4�9�9�;�e�K�.@�]`�ae�]f�PU�VY�PZ� ��h���%��,��e�H�o�
�
�G�C��I�;�o�c�&�k�]�-�
H�PT�U��B���
��
��
��s7�2I9�
I4�+I4�I9�(AJ�4I9�9J�J�J	c��^RIp\4wr#\P!\P
!\P!V444PR4pVP4;_uu_4VPV!V4P^44pWUPRRR7,P4P4PR4^,pRRR4V# +'giX#;i)rN�RGBT)�dim�keepdimr`�����)rr(r�open�io�BytesIO�base64�	b64decode�convert�no_grad�encode_image�	unsqueeze�normr�numpyr|)�b64rr	r
�img�vs&     r'�embed_photor�{s����"���E�
�*�*�R�Z�Z�� 0� 0�� 5�6�
7�
?�
?��
F�C�	��������z�#��8�8��;�<��
���B���-�
-�2�2�4�:�:�<�C�C�I�N�q�Q��
�
�H�
��
�H�s
�6A2C2�2D	c�>a�]tRt^�toRtRtRtRtRtRt	Vt
R#)�Hc��R#)Nr6)�self�as&*r'�log_message�
H.log_message�s��tr)c�0�\P!V4P4q0PV4VP	RR4VP	R\\
V444VP4VPPV4R#)zContent-Typezapplication/json�Content-LengthN)
ru�dumps�encode�
send_response�send_headerrwrN�end_headers�wfile�write)r��code�objrWs&&& r'�_send�H._send�sn���J�J�s�O�"�"�$��&8�&8��&>�����);�<�d�>N�>N�O_�ad�eh�ij�ek�al�>m�����D�J�J�,�,�Q�/r)c
���VPPR4'd/VP^�RRR\R,R\R,/4#VPPR4'd,\	4VP^�RRR\R,/4#VPR
RR/4R	# \
d*pTPRRRR\
T4/4uR	p?#R	p?ii;i)z/health�okTr-r,z/reload��F�errN��	not found)r�
startswithr�rr ryrw)r��es& r'�do_GET�H.do_GET�s����9�9���	�*�*�4�:�:�c�D�$�PS�UZ�[^�U_�al�ns�t�oA�DB�4C�-C��9�9���	�*�*����
�
�3��t�S�%��*�0M� N�N��
�
�3���,�-���W�$�*�*�S�4���s�ST�v�:V�*W�#W��W�s�1*B2�2C&�=C!�C&�!C&c�F�VPPR4'dVP4#VPPR4'gVPRRR/4#\	VP
P
R^44p\P!VPPV4;'gR4pVP
R4;'gRPR	4R,p\	VP
R
^44pV'gVPRRR/4#\V4p\;_uu_4\R
,\R,rvRRR4Xe\V4'gVP^�RRR.R^/4#We,p\ P"!V)\%V\V4^,
44RVp	V	\ P&!W�,)4,p	V	U
u.uF+p
/XV
,CR\)\+W�,4^4/CNK-	pp
VP^�RRR\R,RV/4R# +'giL�;iuup
i \,d+pTPRRRR\/T4/4Rp?R#Rp?ii;i)z/similarz/searchr�r�r�r��{}rgr3�,�k�zimage requiredr*r+Nr�T�resultsr-�scorer�Fr�)rr��_similarr�rO�headers�getrurv�rfile�read�splitr�r~rrNro�argpartitionrQ�argsort�round�floatryrw)
r�r-�pr�r��qr*r+�sims�idxr��resr�s
&            r'�do_POST�	H.do_POST�s���9�9���
�+�+�D�M�M�O�-C��y�y�#�#�I�.�.�t�z�z�#��{�G[�7\�0\�	:��D�L�L�$�$�%5�q�9�:�A��
�
�4�:�:�?�?�[\�K]�Kf�Kf�af�@g�A��5�5��>�'�'�R�.�.�s�3�B�7�C��A�E�E�#�q�M�"�A��t�z�z�#��7G�/H�I�I��C� �A����s��U�6�]�$���y��A���t�z�z�#��d�I�WY�[^�`a�?b�/c�(c��5�D��/�/�4�%��Q��D�	�!��)<�=�b�q�A�C��b�j�j�$�)��,�-�C�KN�O�3�a�A�d�1�g�A�w��e�D�G�n�a�(@�A�3�C�O��J�J�s�T�4��e�C�j�)�S�I�J�
���
P���	:��J�J�s�T�5�%��Q��8�9�9��	:�sW�(AI+�?I+�AI+�.I+�I�!4I+�A%I+�;1I&�,%I+�I#	�
I+�+J �6J�J c�>�\VPPR^44p\P!VP
P
V4;'gR4pVPR4;'gRP4pVPR4;'gRP4pVPR4;'gRp\^\\VPR^44^244pV'gVPRRR	R
R/4#\;_uu_4\R,\R
,r�\R,\R,\R,r�p	RRR4Xe\V4'gVP^�RRR^R./4#X	PV4pVfVPRRR	R
RV2/4#W|,p
W},p\V^
,^�4p\P!V)\V\V4^,
44RVpV'd\!V4MV\X
48d	W�,MRp\#4p\%V\&4'dBVUu0uF4pV'gK
\)V4P4P+4kK6	ppM�\%V\(4'dzVP4'ddVP-RR4P/4Uu0uF9pVP4'gKVP4P+4kK;	ppV'gV\X48d	W�,p.pVF�pVV8XdK\1VV,4pRpV\X
48d
V
V,MRpV'dHV'd@VV8XdVR,
pM.V\2PVR)49dVR,
pM	VR,pV'd?V\X48d/VV,'d VVV,,'d
VR,
pVP5VV,VV34K�	VP7RRR7.pVF�wppp\V4V8�dM�XV,pVPR4pVPR 4;'gRpV'gKXR!V9d
R"V9dKhVP5RVR,R VR#VR#,R$VR$,RVR%\9V^4/4K�	VP^�RRR\R,R&RVR'VR\;V4/RV/4R# +'giEL�;iuupiuupi \<d+pTPR(RR	R
\)T4/4Rp?R#Rp?ii;i)*r�r�rcr3�hex�styler�r�r�Fr�zdw_sku requiredr*r+r.r/r0NTr-r�r�zno stored embedding for dw_sku r�� r=g���Q��?g���Q��?g{�G�z�?c��V^,#)rr6)�ts&r'�<lambda>�H._similar.<locals>.<lambda>�s��a��dr))�key�reverserhrgzcdn.shopify.comzdesignerwallcoverings.comrfrer��query�familyr�r6)rOr�r�rurvr�r�rLr#rQr�r~rrNror�r^rrrsrtrwrx�replacer�r��_FAM_ADJrn�sortr��sortedry) r�r-r�rc�hexq�style_qr�r*r+r.r/r0�qir�r��pool�cand�qfam�qstylesr�r\�scoredr��base�boost�cfamr��_rank�mrTr�r�s &                               r'r��
H._similar�s���@	:��D�L�L�$�$�%5�q�9�:�A��
�
�4�:�:�?�?�[\�K]�Kf�Kf�af�@g�A��e�e�H�o�+�+��2�2�4�F��E�E�%�L�&�&�B�-�-�/�D��e�e�G�n�*�*��G��A�s�3�q�u�u�S�!�}�-�r�2�3�A���z�z�#��e�U�<M�'N�O�O�����*�e�F�m�4�&+�H�o�u�U�|�U�8�_�V����y��A����z�z�#��d�C��I�r�'J�K�K����F�#�B��z��z�z�#��e�U�>]�^d�]e�<f�'g�h�h���A��5�D��q�2�v�s�#�D��?�?�D�5�#�d�C��I�a�K�*@�A�%�4�H�D�.2�#�D�)�2��C��=���VZ�D��e�G��'�4�(�(�;B�H�7�a�a�1�3�q�6�<�<�>�/�/�1�7��H���G�S�)�)�g�m�m�o�o�6=�o�o�c�3�6O�6U�6U�6W�e�6W��[\�[b�[b�[d�,�1�7�7�9�?�?�,�6W��e��r�C��K�/� �*���F�����7�H��T�!�W�~����!"�S��X��s�1�v�4���D��t�|�5�D�=�5�����d�B�!7�7��$���38�D�=�5��q�3�v�;��6�!�9�9�����*�*�5�D�=�5��
�
�t�e�|�T�1�5�6��
�K�K�N�D�K�9��C�"(���t�Q��s�8�q�=�%���G���E�E�(�O��1�5�5��>�+?�+?�R�S�
�(�$�C�/�4O�WZ�4Z�\d��
�
�H�a��k�7�C��A�i�L�$�a��k�8�Q���t�UV��Y�Z�#)�
�J�J�s�T�4��e�C�j�'��&�(�D�(�F�7�O�DM�NW�Y\�^�
_�k����(I��e��B�	:��J�J�s�T�5�%��Q��8�9�9��	:�s��AU'�U'�8(U'�!(U'�
AU'�U'�(AU	�(4U'�-U'�B)U'�4
U�+U�..U'�"U'�?U"�"U"�>	U'�AU'�'U'�/AU'�6U'�U'�+B
U'�6
U'�BU'�	U	�U'�'V�2V�Vr6N)�__name__�
__module__�__qualname__�__firstlineno__r�r�r�r�r��__static_attributes__�__classdictcell__)�
__classdict__s@r'r�r��s#����#�0�.�:�&G:�G:r)r��__main__zvisual-search on :u · z embeddingsTrz	127.0.0.1>rErArBr>>rEr@rD>r@rBrDrF>rCrErB>r@r?r>) rr�rur��	threadingr��http.serverrrr�rori�PILr�environrkrOr��PORTrr(�Lockr~rr^r�r r�r�r�r�
serve_foreverr6r)r'�<module>rsh��-�,�,�C���
�Z�Z�� ��
�2�:�:�>�>�)�V�,�-��
�4��t�	,��
1��~�~���

�d�F�B��Q��Q��"�e�R�QY�[]�^��
"�L�
/��:U�
�2�H�v�x�>P��&���&�/A�
�U�H��x�&�&�)9�6�H�f�CU�
�V�W��w���&�:U��g�v�
��&��
��!V�F
�f:��f:�P�z���F�	��t�f�D��s���K�
@��M���d�+�Q�/�=�=�?�r)