o
    ĎieY                     @   sf   d dl Zd dlmZ d dlZd dlZd dlmZ d dl	m
Z
 d dlmZ d dlmZ G dd dZdS )	    N)assert_array_equal)	DetectionSpeciesNetDetector)load_rgb_image)PreprocessedImagec                   @   s  e Zd ZdZejdddedefddZejde	j
j
fdd	Zejde	j
j
fd
dZejde	j
j
fddZejde	j
j
fddZejde	j
j
fddZ		dddZdddZejdg fdg fdddg ddgfdddg d ddd!g d"ddd#g d$ddd%g d&ddd'g d(ddd)g d*ddd+g d,ddd-g d.ddd/g d0ddd1g d2ddd3g d4ddd5g d6ddd7g d8ddd9g d:ddd;g d<dgfd=ddg d>dddg d?ddd@g dAdddBg dCdddDg dEdddFg dGdddHg dIdddJg dKdddLg dMdddNg dOdddPg dQdddRg dSdddTg dUdddVg dWdddXg dYdgfdZddg d[ddd\g d]ddd^g d_ddd`g d&dddag dbdddcg dddddeg dfdddJg dgdddhg didddjg d2dddkg d4dddlg dmddd7g dndddog d:dddpg d<dgfdqddrg dsdddtg dudddvg dwdddxg dydddzg d{ddd|g d}ddd~g ddddg ddddg ddddg ddddg ddddg ddddg ddddXg ddgfdddg ddddg d$dddg ddddg ddddg d,dddg ddddg ddddg ddddg ddddg d4dddlg d6ddd7g dnddd9g d:dddpg d<dgfdddg ddgfdddg ddddg ddddg ddgfdddg ddddg ddgfdddg ddddg ddddg ddgfdddg ddgfdddg ddgfgddeeef fddZdddZdS )TestDetectorz!Tests for the detector component.class)scope
model_namereturnc                 C   s   t |S )Nr   )selfr    r   T/home/jeff/fluffinator/venv/lib/python3.10/site-packages/speciesnet/detector_test.pydetector   s   zTestDetector.detectorc                 C      t jjddddS )NRGB)    r      r   colorPILImagenewr   r   r   r   img_green_w500_h700#      z TestDetector.img_green_w500_h700c                 C   Z   t jjdddd}t jjdddd}t jdd}||d ||d	 ||d
 |S )Nr   )      r   r$   r$   r   )i  r"   r   )  r"   r   r   )r!   r   )i  r   r   r   r   paster   img_gray	img_greenimgr   r   r   &img_gray_green_gray_w23_w914_w23_h1280'      z3TestDetector.img_gray_green_gray_w23_w914_w23_h1280c                 C   r   )Nr   )  W  r   r   r   r   r   r   r   img_green_w2000_h11111   r   z"TestDetector.img_green_w2000_h1111c                 C   r    )Nr   )r"      r#   r   )r"   i  r   )r"      r&   )r      )r   i  r'   r)   r   r   r   &img_gray_green_gray_w1280_h28_h711_h295   r.   z3TestDetector.img_gray_green_gray_w1280_h28_h711_h29c                 C   r   )Nr   )r"   r"   r   r   r   r   r   r   r   img_green_w1280_h1280?   r   z"TestDetector.img_green_w1280_h1280Nc                 C   s   | d d u s	J | |}|sJ |jdksJ |jdks J |jjdks(J t|j| | |}|s7J |jdks>J |jdksEJ |jjdksMJ t|j| d S )Nr   r   )r"   r%      r/   r0   )r3   r"   r7   )
preprocess
orig_widthorig_heightarrshaper   )r   r   r   r-   r1   r5   preprocessedr   r   r   test_preprocessC   s   	

zTestDetector.test_preprocessc                 C   s   d}| |d }|d |ksJ d|v sJ d}| |tt|dd}|d |ks-J d|vs3J d|v s9J dd |d D }|t|d	d
ksLJ d S )Nzmissing.jpgfilepathfailuresz	green.pngr"   
detectionsc                 S   s   g | ]}|d  qS )confr   ).0detr   r   r   
<listcomp>j   s    z-TestDetector.test_predict.<locals>.<listcomp>T)reverse)predictr   npasarraysorted)r   r   r6   r?   
predictionscoresr   r   r   test_predict\   s   zTestDetector.test_predictztest_data/blank.jpgztest_data/blank2.jpgztest_data/blank3.jpg1gMO?)ga8N?r   gZd;?g-?)categoryrB   bboxztest_data/african_elephants.jpgg/$?)g	?0*?gsM?V}b?g o_Ή?)gr?r?gгYں?V/'?gS㥋?)8gDio??gt$~?gioT?gQ?)Pkw?Bi?t//>?gui?ggs?)):?~jt?W!'>?g}yѩ?g	h"lx?)(\?y)?{ʄ_?竲?g`"?)1w-!?"~j?S:X?g&R?o*?gY8m?)眢#?g"~?Ϡ?gu?V-?)g&1?ʡE?W[잼?)\(?g'1Z?)y?tF_?gÙ_?g0[wT?g"~?)S?9v?ʾ+?g
8*?g&1?)9#?'?:H?`vOj?gL7A`?)g#?'1Z?}гY?HP?gv/?)Ș?\m?UwE?rr   gQ?)g#?"~?gec]?g      ?z"test_data/african_elephants_bw.jpg)gZd;O??gkC8?gH.?)gfc]F?g):?g:̗`?g'?g_vO?)gSt$?g|a2U?9v?"~?g?W[?)g-?gLJ?gn?g{Ic?gZӼ?)g;6~?g'W?g%䃞?g:H?g5;Nѡ?)gx&?r^   g׻??H}?gJY8?)gV-?gE?g9(a_?gO@aӻ?g+ݓ?)>W[?g?g?gPs?gn?)g_v?g}?5^I?g>W[?gL<ձ?g`"?)g%䃞?g=U?g=~oӟ?r|   gHzG?)gHzG?rz   g׻??g7d?gV-?)r?gʡE?ʾ+?g=yX?g+?)rv   g0'?gUMu?gm?gK7A?)%C?rs   rt   x$(~?gn?)g):?ry   rh   2U0*?z$test_data/african_elephants_cmyk.jpg)g,eX?rQ   g,i?rR   g_L?)rU   rV   g:dw?gDl?g~jt?)rf   rS   r|   rT   gea?gsh|??)2%?t$~?wJ?g]T?g_Qګ?)r]   rS   gg??gy?gN@?)ra   rb   rc   g
pU?)rd   Ciq?r_   r}   g+?)gB`"۹?rg   r~   ri   gMb?gd;O?gGz?)ro   rp   rq   H}?)r   rs   g9v?ru   gsh|??gS?z.test_data/african_elephants_truncated_file.jpgg'?)g??g_LJ?g?gW}W?g&S?)rW   rX   g9?gW}W?gΈ?)g{Pk?g	?gH}?gSt$?g	c?)rZ   r[   r\   A	3m?g!rh?)g	?r^   g9?g1ZGU?gTt$?)g?rk   gVe?16T?g2ı.n?)g@?gD?gx]?g{P?gNbX9?)[<?H.?rt   r|   g$C?)rj   rb   䠄?g;?g&1?)rl   rm   rn   ghU?gM?)r   rp   r   r   g?)g(\?gV_?r|   ri   gw/?)rv   rw   rx   g&S?)g%C?gL
F%u?r   r   z5test_data/african_elephants_with_exif_orientation.jpgg
F%u?)g|?5^?gGz?g>٬\?r   g%u?g{Gz?)rW   rX   rY   r   gp_Q?)r   r   r   r   gPkw?g6;Nё?)r]   rS   re   gr)?g48EG?)rd   r   r{   r}   g㥛 ?)g|?5^?r   r   gS㥻?g?)g:H?rk   r   g?gtV?z!test_data/american_black_bear.jpgg㥛 ?)gGr?g~8gDi?gMO?gW[?ztest_data/domestic_cattle.jpgg/$?)g8gDio?gx?r   gs?gX9v?)g#?gO@a?r`   g~jt?gI+?)gͪV?gO@a?g%u?g)\(?ztest_data/domestic_dog.jpgg?߾?)g?߾?g?gTN?g\m?g|?5^?)gw-!l?r   g2%?g'W?ztest_data/human.jpgg0*?)g`ME*?g{Gz?g1Zd?g/$?gjq?)gNё\C?g_v?gVF??g6>W[?2gB`"?)gS㥛?gU?gSt$?gsF?ztest_data/ocelot.jpggOn?)gb=y?gC?gy&1?g<R!?ztest_data/vehicle.jpg3g$C?)r   gKuT?g      ?g䃞ͪ?)paramsc                 C   s8   |j \}}|t|}|d usJ |||d |fS )NrA   )paramr8   r   rG   )r   r   requestr?   labelr,   r   r   r   predicted_vs_expectedm   s      
pz"TestDetector.predicted_vs_expectedc                 C   s   |\}}|t |dd ddksJ t |dd dd}t||D ]9\}}|d |d ks-J |d t|d ks:J |d tj|d d	d
ksIJ |d tj|d d	d
ksXJ qd S )Nc                 S      | d S NrB   r   rD   r   r   r   <lambda>a      z.TestDetector.test_detections.<locals>.<lambda>T)keyrF   c                 S   r   r   r   r   r   r   r   r   b  r   rO   r   rB   g~jtX?)absrP   )rJ   zipr   from_categorypytestapprox)r   r   	predictedexpectedpred_detexp_detr   r   r   test_detections_  s    zTestDetector.test_detections)r   N)__name__
__module____qualname____doc__r   fixturestrr   r   r   r   r   r-   r1   r5   r6   r>   rM   tuplelistr   r   r   r   r   r   r      s.   
		

QQQLL      or   )numpyrH   numpy.testingr   	PIL.Imager   r   speciesnet.constantsr   speciesnet.detectorr   speciesnet.utilsr   r   r   r   r   r   r   <module>   s   