o
    e0                     @   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	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
 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'e(d/kre'  dS dS )0    N)config)rfapi)APP_URLDEFAULT_BATCH_NAME&get_conditional_configuration_variableload_roboflow_api_key)ClassificationModel)InstanceSegmentationModel)ObjectDetectionModel)SemanticSegmentationModelc                 C   s   t   d S )N)roboflowlogin)args r   B/var/www/myenv/lib/python3.10/site-packages/roboflow/roboflowpy.pyr      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datasetversionr   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   Roboflowr   
datasetUrl	workspaceprojectversionsprintexitr   intdownloadformatr"   )r   rfwpvr'   r(   r   r   r   r   r,      s   r,   c                 C   s2   t  }|| j}|j| j| j| j| jd d S )N)dataset_pathdataset_formatproject_namenum_workers)r   r$   r&   upload_datasetfolderr-   r'   concurrency)r   r.   r&   r   r   r   import_dataset/   s   
r9   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_uploads
batch_name	tag_namesis_prediction)r   r$   r&   r'   single_upload	imagefile
annotationlabelmapr>   num_retriesbatchrA   rB   )r   r.   r&   r'   r   r   r   upload_image:   s   
rI   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: r(   z
  images: imagesz  classes: classes)r   r$   r&   project_listr)   r   keys)r   r.   r&   projectsr0   r   r   r   list_projectsJ   s   rU   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defaultrJ   r   z (default workspace) rK   rL   rN   )roboflow_configRF_WORKSPACESvaluesr   r)   r   )r   
workspacesrf_workspacer/   r   r   r   list_workspacesY   s   
$r_   c                 C   s.   t | j}t|| j}ttj|dd d S )Nr   indent)r   workspaceIdr   get_workspacer)   jsondumps)r   api_keyworkspace_jsonr   r   r   rc   c   s   
rc   c                 C   s@   | j ptdd d}t|}t||| j}ttj|dd d S )NrV   rW   r   r`   )	r&   r   r   r   get_project	projectIdr)   rd   re   )r   workspace_urlrf   dataset_jsonr   r   r   rh   i   s   rh   c                 C   s   | j ptdd d}t|}| d| j }| j}|s/| jd\}}t|||}|d d }tt	t
td| }|||}	i }
| jd urQ|dv rQt| jd |
d	< | jd urc|d
krct| jd |
d< |	j| jfi |
}t| d S )NrV   rW   rL   r'   rO   object-detectionclassificationinstance-segmentationsemantic-segmentation)rm   ro   rp   d   
confidencerm   overlap)r&   r   r   modelrO   r>   r   rh   r
   r   r	   r   rr   r+   rs   predictfiler)   )r   rj   rf   project_urlprojectTyperi   _rk   
modelClassrt   kwargsr   r   r   r   inferp   s.   
r|   c                  C   sT   t jdd} | jdd}t| t| t| t| t| t| t	| | S )NuD   Welcome to the roboflow CLI: computer vision at your fingertips 🪄)descriptionsubcommandstitle)
argparseArgumentParseradd_subparsers_add_login_parser_add_download_parser_add_upload_parser_add_import_parser_add_infer_parser_add_projects_parser_add_workspaces_parser)parser
subparsersr   r   r   
_argparser   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 )Nr,   zDDownload a dataset version from your workspace or Roboflow Universe.helpr%   z0Dataset URL (e.g., `roboflow-100/cells-uyemf/2`)-fr-   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])destrX   r   z-lr"   z Location to download the datasetr   r   func)
add_parseradd_argumentset_defaultsr,   )r   download_parserr   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t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   rD   zpath to image file-wr&   Kspecify a workspace url or id (will use default workspace if not specified)r   -pr'   z#project_id to upload the image intoz-arE   z"path to annotation file (optional)-mrF   z path to labelmap file (optional)z-sr>   z)split set (train, valid, test) - optionaltrainr   r   rX   z-rrG   z1Retry failed uploads this many times (default: 0)r   )r   r   rO   rX   z-brH   z"Batch name to upload to (optional)-trA   z*Tag names to apply to the image (optional)z-irB   z.Whether this upload is a prediction (optional)
store_true)r   r   actionr   )r   r   r+   r   r   rI   )r   upload_parserr   r   r   r      sp   r   c                 C   sr   | 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d |jtd d S )Nimportz$Import a dataset from a local folderr   r7   z6filesystem path to a folder that contains your datasetr   r&   r   r   r   r'   z,project will be created if it does not exist-cr8   z<how many image uploads to perform concurrently (default: 10)
   r   rO   r   rX   r   r-   zWdataset format. Valid options are [voc, yolov8, yolov5, auto] (use auto for autodetect)autor   r   )r   r   r+   r   r9   )r   import_parserr   r   r   r      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   listzlist projectsr   r&   r   r   r   getz show detailed info for a projectri   
project ID)r   r   r   r   rU   rh   )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   r   zlist workspacesr   r   z"show detailed info for a workspacerb   r   )r   r   r   r_   r   rc   )r   workspace_parserworkspacesubparsersworkspacelist_parserworkspaceget_parserr   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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   rv   z filesystem path to an image filer   r&   r   r   r   rt   z?model id (id of a version with trained model e.g. my-project/3)r   rr   zkspecify a confidence threshold between 0.0 and 1.0, default is 0.5(only applies to object-detection models)g      ?r   z-ors   zispecify an overlap threshold between 0.0 and 1.0, default is 0.5(only applies to object-detection models)r   rO   z5specify the model type to skip api call to look it uprl   )r   r   choicesr   )r   r   floatr   r|   )r   infer_parserr   r   r   r   2  sN   r   c                 C   s   | j ddd}|jtd d S )Nr   zLog in to Roboflowr   r   )r   r   r   )r   login_parserr   r   r   r   c  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   mainh  s
   
r   __main__))r   rd   r   r   r   rZ   roboflow.adaptersr   roboflow.configr   r   r   r   roboflow.models.classificationr   %roboflow.models.instance_segmentationr	    roboflow.models.object_detectionr
   %roboflow.models.semantic_segmentationr   r   r   r,   r9   rI   rU   r_   rc   rh   r|   r   r   r   r   r   r   r   r   r   __name__r   r   r   r   <module>   sB   
; 1	
