o yf2 @sbddlZddlZddlZddlZddlmZmZmZm Z m Z m Z e dZ GdddZeZdS)N) modelloaderpathsdeepbooru_modeldevicesimagessharedz([\\()])c@s>eZdZddZddZddZddZd d Zdd d ZdS) DeepDanboorucCs d|_dSN)modelselfr bC:\Users\Luke\Documents\Stable diffusion\Automatic1111\stable-diffusion-webui\modules\deepbooru.py__init__ s zDeepDanbooru.__init__cCsr|jdurdStjtjtjdddgdd}t |_|j t j |ddd|j |jtjtjdS) NZtorch_deepdanbooruzahttps://github.com/AUTOMATIC1111/TorchDeepDanbooru/releases/download/v1/model-resnet_custom_v3.ptz.ptzmodel-resnet_custom_v3.pt) model_path model_url ext_filter download_namercpu) map_location)r r load_modelsospathjoinr models_pathrZDeepDanbooruModelload_state_dicttorchloadevaltorrdtype)r filesr r rrs   zDeepDanbooru.loadcCs||jtjdSr )rr rrdevicer r r rstart!szDeepDanbooru.startcCs&tjjs|jtjtdSdSr )ropts!interrogate_keep_models_in_memoryr rrrtorch_gcr r r rstop%s zDeepDanbooru.stopcCs|||}||Sr )r# tag_multir')r pil_imageresr r rtag*s zDeepDanbooru.tagFc stjj}tjj}tjj}tjj}tjjo| }td| ddd}t t j |t j ddd} t2tt| tj} || d} Wdn1sZwYWdn1siwYi} t|jj| D]\} }||krqw| drqw|| | <qw|rt| }ndd t| d d d D}g}d dtjjdDfdd |DD]*} | | }| }|r| dd}|rt!"t#d|}|rd|d|dd}|$|qd%|S)NRGBi)r rzrating:cSsg|]\}}|qSr r ).0r+_r r r Msz*DeepDanbooru.tag_multi..cSs |d S)Nr )xr r rMs z(DeepDanbooru.tag_multi..)keycSsh|] }|ddqS) r0)stripreplacer/r3r r r Qsz)DeepDanbooru.tag_multi..,csg|]}|vr|qSr r r9Z filtertagsr rr1Ssr0r6z\\\1(:z.3f)z, )&rr$%interrogate_deepbooru_score_thresholddeepbooru_use_spacesdeepbooru_escapedeepbooru_sort_alphainterrogate_return_ranksr resize_imageconvertnp expand_dimsarrayfloat32rno_gradrautocast from_numpyrr"r detachrnumpyziptags startswithsorteditemsdeepbooru_filter_tagssplitr8resub re_specialappendr)r r)Zforce_disable_ranks threshold use_spacesZ use_escapeZ alpha_sortZ include_rankspicar3yZprobability_dictr+ probabilityrQr*Z tag_outformatr r<rr(1sH      zDeepDanbooru.tag_multiN)F) __name__ __module__ __qualname__rrr#r'r+r(r r r rr sr)rrWrrOrGmodulesrrrrrrcompilerYrr r r r rs   V