o
    ĎiSO                     @   s  d dl Z d dl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
mZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Z dd  Z!d!d" Z"d#d$ Z#d%d& Z$d'd( Z%d)d* Z&d+d, Z'd-d. Z(d/d0 Z)d1d2 Z*d3d4 Z+d5d6 Z,d7d8 Z-d9d: Z.d;d< Z/d=d> Z0d?d@ Z1dAdB Z2dCdD Z3dEdF Z4e5dGkre4  dS dS )H    N)config)
deployment)rfapi)APP_URL&get_conditional_configuration_variableload_roboflow_api_key)ClassificationModel)InstanceSegmentationModel)KeypointDetectionModel)ObjectDetectionModel)SemanticSegmentationModelc                 C   s   t j| jd d S )N)force)roboflowloginr   args r   O/home/jeff/fluffinator/venv/lib/python3.10/site-packages/roboflow/roboflowpy.pyr      s   r   c                 C   sJ   t  }|| j}|| j}|| j}|j| j| jd}t	| d S )N)
model_type
checkpoint)
r   Roboflow	workspaceprojectversionversion_numbertrainr   r   print)r   rfr   r   r   modelr   r   r   r      s   r   c                 C   s^   d}t || }|r-|dp|d}|dp|d}|dp'|d}|||fS dS )	Nzx(?:https?://)?(?:universe|app)\.roboflow\.(?:com|one)/([^/]+)/([^/]+)(?:/dataset)?(?:/(\d+))?|([^/]+)/([^/]+)(?:/(\d+))?                  )NNN)rematchgroup)urlregexr&   organizationdatasetr   r   r   r   
_parse_url   s   
r,   c                 C   s   t  }t| j\}}}|||}|s6| }|s(td| d td |d }td|j	 d n|	t
|}|j| j| jdd d S )	Nzproject z# does not have any version. exitingr   z,Version not provided. Downloading last one ()T)location	overwrite)r   r   r,   
datasetUrlr   r   versionsr   exitr   intdownloadformatr/   )r   r   wpvr   r2   r   r   r   r   r5   *   s   r5   c                 C   sB   t | j}t|}|| j}|j| j| j| j| j| j	d d S )N)dataset_pathproject_namenum_workers
batch_namenum_retries)
r   r   r   r   upload_datasetfolderr   concurrencyr=   r>   )r   api_keyr   r   r   r   r   import_dataset:   s   


rC   c              
   C   s^   t  }|| j}|| j}|j| j| j| j| j| j	| j
| jr'| jdng | jd d S )N,)
image_pathannotation_pathannotation_labelmapsplitnum_retry_uploadsr=   	tag_namesis_prediction)r   r   r   r   single_upload	imagefile
annotationlabelmaprH   r>   batchrJ   rK   )r   r   r   r   r   r   r   upload_imageG   s   
rQ   c                 C   s   t | j}|| j}| jd ur<t| jtr| jd n| j}||}|| j}|	t
| jt
| jt
| j d S |jt
| jt
| j| jt
| jt
| jd d S )Nr   )r   
model_pathproject_ids
model_namefilename)r   r   rB   r   r   
isinstancer   listr   deploystrr   rR   rU   deploy_modelrT   )r   r   r   
project_idr   r   r   r   r   upload_modelW   s   

$
r\   c                 C   s   t  }|| j}|j}|D ]F}t  t|d  tdt d|d   td|d   td|d   td|d	   td
|d   td|d    qd S )Nname  link: /id  id: z  type: typez  versions: r2   z
  images: imagesz  classes: classes)r   r   r   project_listr   r   keys)r   r   r   projectsr8   r   r   r   list_projectsl   s   rh   c                 C   sx   t j }tdd d}|D ],}t  t|d  |d |krdnd  tdt d|d   td	|d   qd S )
NRF_WORKSPACEdefaultr]   r(   z (default workspace) r^   r_   ra   )roboflow_configRF_WORKSPACESvaluesr   r   r   )r   
workspacesrf_workspacer7   r   r   r   list_workspaces{   s   
$rr   c                 C   s.   t | j}t|| j}ttj|dd d S )Nr!   indent)r   workspaceIdr   get_workspacer   jsondumps)r   rB   workspace_jsonr   r   r   rv      s   
rv   c           
      C   s   t | j}| | j}|| j}||j}|j| j	| j
dd\}}}||}tdd}	t||	 W d    d S 1 sCw   Y  d S )Nzbatch-video)prediction_typeztest_video.jsonr7   )r   r   rB   r   r   r   r   r   predict_video
video_filefpspoll_until_video_resultsopenrw   dump)
r   r   r   r   r   job_id
signed_urlexpire_timeresultsfr   r   r   run_video_inference_api   s   
"r   c                 C   sN   t | j}| }td| || j}td| || j}td| d S )Nr   r   r   )r   r   rB   r   r   r   r   r   )r   r   r   r   r   r   r   r   get_workspace_project_version   s   

r   c                 C   s@   | j ptdd d}t|}t||| j}ttj|dd d S )Nri   rj   r!   rs   )	r   r   r   r   get_project	projectIdr   rw   rx   )r   workspace_urlrB   dataset_jsonr   r   r   r      s   r   c                 C   s   | j ptdd d}t|}| d| j }| j}|s/| jd\}}t|||}|d d }tt	t
ttd| }|||}	i }
| jd urR|dv rRt| jd |
d	< | jd urd|d
krdt| jd |
d< |	j| jfi |
}t| d S )Nri   rj   r_   r   rb   )object-detectionclassificationinstance-segmentationsemantic-segmentationzkeypoint-detection)r   r   r   d   
confidencer   overlap)r   r   r   r   rb   rH   r   r   r   r   r	   r   r
   r   r4   r   predictfiler   )r   r   rB   project_urlprojectTyper   _r   
modelClassr   kwargsr'   r   r   r   infer   s0   
r   c                  C   s   t jdd} | jdd}t| t| t| t| t| t| t	| t
| t| t| t| t| t| | jddddd	 | jtd
 | S )NuD   Welcome to the roboflow CLI: computer vision at your fingertips 🪄)descriptionsubcommandstitle-vz	--versionzshow version info
store_true)helpactionfunc)argparseArgumentParseradd_subparsers_add_login_parser_add_download_parser_add_train_parser_add_upload_parser_add_import_parser_add_infer_parser_add_projects_parser_add_workspaces_parser_add_upload_model_parser)_add_get_workspace_project_version_parser#_add_run_video_inference_api_parserr   add_deployment_parser_add_whoami_parseradd_argumentset_defaultsshow_version)parser
subparsersr   r   r   
_argparser   s$   
r   c                 C   s   t tj d S )N)r   r   __version__r   r   r   r   r      s   r   c                 C   sT   t di d}dd | D }t dd d}||d }d|d< ttj|dd	 d S )
Nrp   rj   c                 S   s   i | ]}|d  |qS )r(   r   ).0r7   r   r   r   
<dictcomp>   s    zshow_whoami.<locals>.<dictcomp>ri   z
**********apiKeyr!   rs   )r   ro   getr   rw   rx   )r   rn   workspaces_by_urldefault_workspace_urldefault_workspacer   r   r   show_whoami   s   r   c                 C   s   | j ddd}|jtd d S )Nwhoamizshow current user infor   r   )
add_parserr   r   r   download_parserr   r   r   r      s   r   c                 C   sN   | j ddd}|jddd |jdddd	d
 |jdddd |jtd d S )Nr5   zDDownload a dataset version from your workspace or Roboflow Universe.r   r1   z0Dataset URL (e.g., `roboflow-100/cells-uyemf/2`)-fr6   voczSpecify the format to download the version. Available options: [coco, yolov5pytorch, yolov7pytorch, my-yolov6, darknet, voc, tfrecord, createml, clip, multiclass, coco-segmentation, yolo5-obb, png-mask-semantic, yolov8, yolov9]destrk   r   z-lr/   z Location to download the datasetr   r   r   )r   r   r   r5   r   r   r   r   r      s   	r   c                 C   s   | j ddd}|jddd |jdddd	 |jd
ddd	 |jdddd	 |jdddd	 |jddddd |jdddtdd |jdddd	 |jd d!d"d	 |jd#d$d%d&d' |jtd( d S ))Nuploadz"Upload a single image to a datasetr   rM   zpath to image file-wr   Kspecify a workspace url or id (will use default workspace if not specified)r   -pr   #project_id to upload the image into-arN   z"path to annotation file (optional)-mrO   z path to labelmap file (optional)z-srH   z)split set (train, valid, test) - optionalr   )r   r   rk   -rr>   z1Retry failed uploads this many times (default: 0)r   )r   r   rb   rk   z-brP   z"Batch name to upload to (optional)-trJ   z*Tag names to apply to the image (optional)z-irK   z.Whether this upload is a prediction (optional)r   r   r   r   r   )r   r   r4   r   rQ   )r   upload_parserr   r   r   r   	  sn   r   c                 C   sp   | j ddd}|jdddd |jdd	d
d |jddtdd |jdddd |jdddd |jtd d S )Nr   z#Train a model for a dataset versionr   r   r   r   r   r   r   z!project_id to train the model forr   r   zversion number to trainr   rb   r   r   r   z7type of the model to train (e.g., rfdetr-nano, yolov8n)z--checkpointr   z"checkpoint to resume training fromr   )r   r   r4   r   r   )r   train_parserr   r   r   r   C  s8   r   c                 C   s   | j ddd}|jddd |jdddd	 |jd
ddd	 |jddtddd |jdddd	 |jddtddd |jtd d S )Nimportz$Import a dataset from a local folderr   r@   z6filesystem path to a folder that contains your datasetr   r   r   r   r   r   z,project will be created if it does not exist-crA   z<how many image uploads to perform concurrently (default: 10)
   r   rb   r   rk   -nr=   z)name of batch to upload to within projectr   r>   z0Retry failed uploads this many times (default=0)r   r   )r   r   r4   r   rC   )r   import_parserr   r   r   r   b  s>   
r   c                 C   s   | j ddd}|jdd}|j ddd}|jdd	d
d |jtd |j ddd}|jddd |jdd	d
d |jtd d S )Nr   zOproject related commands.  type 'roboflow project' to see detailed command helpr   zproject subcommandsr   rW   zlist projectsr   r   r   r   r   r   z show detailed info for a projectr   
project ID)r   r   r   r   rh   r   )r   project_parserprojectsubparsersprojectlist_parserprojectget_parserr   r   r   r     s.   r   c                 C   s`   | j ddd}|jdd}|j ddd}|jtd |j d	d
d}|jddd |jtd d S )Nr   zSworkspace related commands.  type 'roboflow workspace' to see detailed command helpr   zworkspace subcommandsr   rW   zlist workspacesr   r   z"show detailed info for a workspaceru   r   )r   r   r   rr   r   rv   )r   workspace_parserworkspacesubparsersworkspacelist_parserworkspaceget_parserr   r   r   r     s   r   c                 C   st   | j ddd}|jdddd |jddd	d |jd
dtdd |jdddd |jddtddd |jtd d S )Nr   zrun video inference apir   r   rB   r   r   r   r   r   r   %version number to upload the model tor   r   r|   zpath to video filez-fpsr}   r"   r   r   )r   r   r4   r   r   )r   run_video_inference_api_parserr   r   r   r     sB   r   c                 C   s   | j ddd}|jddd |jdddd	 |jd
ddd	 |jddtddd |jddtddd |jdddg dd |jtd d S )Nr   zperform inference on an imager   r   z filesystem path to an image filer   r   r   r   r   r   z?model id (id of a version with trained model e.g. my-project/3)r   r   zkspecify a confidence threshold between 0.0 and 1.0, default is 0.5(only applies to object-detection models)g      ?r   z-or   zispecify an overlap threshold between 0.0 and 1.0, default is 0.5(only applies to object-detection models)r   rb   z5specify the model type to skip api call to look it up)r   r   r   r   )r   r   choicesr   )r   r   floatr   r   )r   infer_parserr   r   r   r     sN   r   c                 C   s   | j ddd}|jdddd |jddd	d |jd
dddd |jddtdd d |jdddd |jdddd |jddddd |jddd d |jtd! d S )"Nr\   z"Upload a trained model to Roboflowr   r   rB   r   r   r   r   r   r   appendzEproject_id to upload the model into (can be specified multiple times))r   r   r   r   r   z0version number to upload the model to (optional)r   r   r   z(type of the model (e.g., yolov8, yolov5)r   rR   zpath to the trained model filer   rU   zweights/best.ptzname of the model filer   r   rT   zname of the modelr   )r   r   r4   r   r\   )r   upload_model_parserr   r   r   r     sb   r   c                 C   s`   | j ddd}|jdddd |jddd	d |jd
ddd |jddtdd |jtd d S )Nget_workspace_infoz"get workspace project version infor   r   rB   r   r   r   r   r   r   z#project_id to upload the model intor   r   r   r   r   )r   r   r4   r   r   )r    workspace_project_version_parserr   r   r   r   8  s4   r   c                 C   s0   | j ddd}|jddddd |jtd	 d S )
Nr   zLog in to Roboflowr   r   r   zforce loginr   r   r   )r   r   r   r   )r   login_parserr   r   r   r   U  s   r   c                  C   s2   t  } |  }t|dr|| d S |   d S )Nr   )r   
parse_argshasattrr   
print_help)r   r   r   r   r   main`  s
   
r   __main__)6r   rw   r%   r   r   rm   r   roboflow.adaptersr   roboflow.configr   r   r   roboflow.models.classificationr   %roboflow.models.instance_segmentationr	   "roboflow.models.keypoint_detectionr
    roboflow.models.object_detectionr   %roboflow.models.semantic_segmentationr   r   r   r,   r5   rC   rQ   r\   rh   rr   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __name__r   r   r   r   <module>   s\   	
	:"%14	
