Skip to main content
Glama

MCP Agent Platform

eye_agent.cpython-312.pyc11.8 kB
� ��g&.���dZddlZddlZddlZddlmZmZmZm Z m Z ddl Z ddl Z ddl Z ddlZddlZddlmZddlmZmZddlmZddlmZGd�d e�Zy) u 视觉智能体 �N)�Dict�Any�List�Tuple�Optional)� BaseAgent)� ImageMessage� TextMessage)�FaceRecognition)�PersonDatabasec ���eZdZdededef�fd� Z�fd�Z�fd�Zdedeefd �Z defd �Z d e defd �Z d e ede ede ede ddf d�Zd�Z�xZS)�EyeAgent�agent_id�host�portc����t�|�|d||�d|_d|_d|_d|_t �|_t�|_ d|_ d|_ d|_ y)N�visionFrg$@g��@) �super�__init__�camera� is_capturing�last_analysis_time�analysis_intervalr �face_recognitionr �person_database�last_recognized_person_id�last_recognition_time�recognition_cooldown)�selfrrr� __class__s ��,D:\AIProject\mcpTest\src\agents\eye_agent.pyrzEyeAgent.__init__si��� ����8�T�4�8��� �!���"#���!%���!0� 1��� .�/���*.��&�%&��"�$)��!�c����K�t�|���d{���tjd�|_|jj �s|j jd�yd|_tj|j��|j jd�|j jdt|jj���d��y7�ڭw)u启动视觉智能体NrzFailed to open cameraTu视觉智能体已启动u 已加载u个已知人物数据)r�start�cv2� VideoCapturer�isOpened�logger�errorr�asyncio� create_task� _capture_loop�info�lenr�get_all_persons�rr s �r!r$zEyeAgent.start&s�������g�m�o����&�&�q�)�� ��{�{�#�#�%� �K�K� � �5� 6� � ������D�.�.�0�1� � � ���3�4� � � ���9�S��)=�)=�)M�)M�)O�%P�$Q�Qf�g�h� �s�C2�C0�CC2c���K�d|_|jr|jj�t�|���d{���y7��w)u停止视觉智能体FN)rr�releaser�stopr0s �r!r3z EyeAgent.stop3s5�����!��� �;�;� �K�K� � � !��g�l�n���s�?A �A�A � image_base64�returnc ��@K� |jj|�\}}}t|�dk(ryg}g}g}tj�}t t |||��D�]�\} \} } } |j jd�|jj| �} | ��|jj| �}|d}|j|�|j| �|d}||z }|dkDr|j|�nd}|jj| || ��|j|�d |d �d |�d ��|j jd |�d| �d|d �d���� |j jd�|j�}|jj|| | ��}|j|�|j|�|j|�d��|j jd|�d|�d �����|j jd�|jj!|||�}|j#||||��d{���|S7�#t$$r(}|j j'd|���Yd}~yd}~wwxYw�w)u�处理人脸识别 Args: image_base64: Base64编码的图像数据 Returns: 处理后的图像Base64编码,如果没有检测到人脸则返回None rNu查找相似人物�name� last_seen�<u刚刚)r8� face_imageu (见过� seen_countu次,上次见面: �)u识别到已知人物: z (ID: u, 见过u次)u新人物,生成随机名称)r7� face_encodingr:u (初次见面)u添加新人物: u绘制人脸边界框和名称u处理人脸识别时出错: )r� process_imager.�time� enumerate�zipr(r-r�find_similar_person� get_person�append�_format_time_diff� update_person�_generate_random_name� add_person� draw_faces�_send_greeting_if_needed� Exceptionr))rr4�faces�face_encodings� face_images�recognized_names�recognized_ids�recognized_info� current_time�i�face�encodingr:� person_id�personr7r8� time_diff� time_info� random_name�new_id�processed_image�es r!�_process_face_recognitionz"EyeAgent._process_face_recognition:s�����H �26�1F�1F�1T�1T�Ua�1b� .�E�>�;��5�z�Q��� "� ��N� �O��9�9�;�L�4=�S���Xc�=d�3e�+ W�/��/�D�(�J�� � � � �#5�7� �0�0�D�D�X�N� ��(�!�1�1�<�<�Y�G�F�!�&�>�D�$�+�+�D�1�"�)�)�)�4�!'�{� 3�I� ,�y� 8�I�EN�QS�^�� 6� 6�y� A�Ya�I��(�(�6�6�!�".�#-�7��$�*�*�d�V�8�F�<�<P�;Q�Qe�fo�ep�pq�+r�s��K�K�$�$�'>�t�f�F�9�+�U]�^d�eq�^r�]s�sw�%x�y��K�K�$�$�'E�G�"&�"<�"<�">�K�"�1�1�<�<�(�&.�#-�=��F� %�+�+�K�8�"�)�)�&�1�#�*�*�k�]�/�+J�K��K�K�$�$�'8�� �V�F�8�ST�%U�V�W+ W�X �K�K� � �=� ?�"�3�3�>�>�|�U�Td�e�O��/�/��@P�Ra�co�p� p� p�"� "� q��� � �K�K� � � =�a�S�A� B��� �sK�J�-I*�J�H/I*�!I(�"I*�'J�(I*�* J�3J�J�J�Jc���gd�}gd�}tj|�}tj|�}djtjtj d���}|�|�|��S)u生成随机人物名称)u赵u钱u孙u李u王u刘u田) u小明u小红u小华u小天u小宇u小花u小美u小宁u小德u小琳��)�k)�random�choice�join�choices�string�digits)r�prefixes�names�prefixr7�suffixs r!rGzEyeAgent._generate_random_name�sZ��D��t�����x�(���}�}�U�#��������� � ��;�<����$���x�(�(r"rXc�|�t|�}|dz}|dz}|dz}|dkDr|�d�S|dkDr|�d�S|dkDr|�d�S|�d�S)u�格式化时间差 Args: time_diff: 时间差(秒) Returns: 格式化后的时间差字符串 r9�ru天前u 小时前u 分钟前u秒前)�int)rrX�seconds�minutes�hours�dayss r!rEzEyeAgent._format_time_diff�st���i�.���R�-���2� ����{�� �!�8��V�6�?� "� �Q�Y��W�I�&� &� �q�[��Y�i�(� (��Y�f�%� %r"� person_ids� person_names� person_inforRNc���K�|sy|d}|d}|j|k7s||jz |jk\r�||_||_|jj |�}|d}|dkrd|�d�} nd|�d�} t |j dd |�d | ��� �} |jjd | ���|jd| j���d{���yy7��w) u如果需要,发送问候消息 Args: person_ids: 识别到的人物ID列表 person_names: 识别到的人物名称列表 person_info: 识别到的人物详细信息列表 current_time: 当前时间戳 Nrr;�u 你好,u!很高兴认识你!u!很高兴再次见到你!�brainu[视觉识别] 我看到了u。)� sender_id� receiver_id�textu发送问候消息: ) rrrrrCr rr(r-� send_message�to_dict) rrtrurvrRrV� person_namerWr;�greeting�greeting_messages r!rJz!EyeAgent._send_greeting_if_needed�s����� ��q�M� �"�1�o� � � *� *�i� 7��t�9�9�9�T�=V�=V�V�.7�D� *�)5�D� &��)�)�4�4�Y�?�F�� �-�J��Q��&�{�m�3K�L��&�{�m�3Q�R�� +��-�-�#�2�;�-�s�8�*�M� � � �K�K� � �3�H�:�>� ?��#�#�G�-=�-E�-E�-G�H� H� H�1W�0 I�s�CC#�C!�C#c��K�|j�r� |jj�\}}|�rQtjd|tj dg�\}}t j|�jd�}|j|��d{���}ddl m }|d|xs|d���d{���}tj�} | |jz |jk\r�| |_ d} |j�,|j j#|j�} | r| d } t%|j&d || � �} |j(j+d �|j-d | j/���d{���t1j2d ��d{���|jr���yy7��7��7�77�#t4$rF} |j(j7d| ���t1j2d��d{���7Yd} ~ �dd} ~ wwxYw�w)u持续捕获视频的循环z.jpg�Fzutf-8Nr)�broadcast_messager)�type�contentr7ry)rzr{� image_dataru!发送图像到大脑进行分析g�?zError in capture loop: g.@)rr�readr%�imencode�IMWRITE_JPEG_QUALITY�base64� b64encode�decoder^�src.web.serverr�r?rrrrrCr rr(r-r}r~r*�sleeprKr))r�ret�frame�_�bufferr4r\r��successrRrrW�messager]s r!r,zEyeAgent._capture_loop�s��������. *�!�[�[�-�-�/� ��U�� #� � �V�U�S�=U�=U�WY�<Z� [�I�A�v�#)�#3�#3�F�#;�#B�#B�7�#K�L�-1�,J�,J�<�,X�&X�O�A�$5� (�#2�#B�l�7�%��G� $(�9�9�;�L�#�d�&=�&=�=��AW�AW�W�2>��/�'+� ��9�9�E�%)�%9�%9�%D�%D�T�Ec�Ec�%d�F�%�.4�V�n� �#/�&*�m�m�(/�'3�(3� #��� � �(�(�)L�M�"�/�/�����9J�K�K�K��m�m�C�(�(�(�W���'Y����6L��)��� *�� � �!�!�$;�A�3�"?�@��m�m�D�)�)�)�� *�s��H �BF9�F/�F9�0F2�1C F9�=F5�>F9�F7�F9� H �-H �/F9�2F9�5F9�7F9�9 H�6H�8G;�9H�>H �H�H )�__name__� __module__� __qualname__�strrorr$r3rr^rG�floatrErrJr,� __classcell__)r s@r!rrs����*��*�C�*�s�*�$ i��Q�C�Q�H�S�M�Q�f )�s� )�&�5�&�S�&�6*I��c��*I�RV�WZ�R[�*I�jn�or�js�*I�DI�*I�NR�*I�X1*r"r)�__doc__r%r��numpy�np�typingrrrrrr*r?rcrg�os�src.agents.base_agentr�src.utils.mcp_protocolr r �src.utils.face_recognitionr �src.utils.person_databaser r�r"r!�<module>r�sD��� � ��3�3�� � � � �+�<�6�4�*�y�*r"

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/rolenet/McpAgentRobot'

If you have feedback or need assistance with the MCP directory API, please join our Discord server