AI Vet

Detect and monitor pet cataracts with AI

Detect and Monitor Pet Cataracts

AI 기반 앱은 반려동물의 백내장을 쉽게 감지하고 모니터링하는 데 도움이 됩니다. 조기 진단을 받고 상태의 진행 상황을 추적하세요.

ROC CurveConfusion Matrix
YH

정 용훈

BE & AI Engineer, Team Leader

백엔드 개발과 AI 모델링의 주요 책임을 맡고 있습니다. 팀의 전반적인 기술 전략을 수립하고, 애플리케이션의 핵심 AI 기능을 설계 및 구현합니다.

HY

남 현원

BE & AI Engineer

데이터 전처리와 서버 아키텍처 최적화 작업을 주로 담당합니다. 안정적이고 확장 가능한 백엔드 시스템을 구축하여, 애플리케이션의 안정성을 보장합니다.

HS

김 혜성

FE & AI Engineer

사용자 인터페이스와 사용자 경험 설계를 주로 담당하는 프론트엔드 엔지니어입니다. UI 디자인과 프론트엔드 개발을 통해, 사용자에게 직관적이고 매끄러운 경험을 제공합니다.

SB

강 수빈

FE & AI Engineer

앱 기능 구현을 주로 담당하는 프론트엔드 엔지니어입니다. 사용자 친화적인 인터페이스를 설계하는 동시에, AI 기술을 접목하여 앱의 다양한 기능들을 효과적으로 구현하는 데 주력하고 있습니다.

Experience the App

AI Vet의 AI를 체험해보세요. (강아지 눈 사진을 넣어보세요!)

Explore Our Codebase

AI Vet의 핵심 Code를 확인해보세요.


  # Model Code
  def vit_inference(encoding_img : str) -> dict:
    img = Image.open(io.BytesIO(base64.b64decode(encoding_img)))
    data = np.array(img)

    # Preprocessing code...

    vit_model = vit.vit_b32(
        image_size = 224,
        activation = 'softmax',
        pretrained = True,
        include_top = False,
        pretrained_top = False,
        classes = 4)

    model = tf.keras.Sequential([
            vit_model,
            tf.keras.layers.Flatten(),
            tf.keras.layers.BatchNormalization(),
            tf.keras.layers.Dense(11, activation = tfa.activations.gelu),
            tf.keras.layers.BatchNormalization(),
            tf.keras.layers.Dense(4, 'softmax')
        ],
        name = 'vision_transformer')
    learning_rate = 1e-4

    optimizer = tfa.optimizers.RectifiedAdam(learning_rate=learning_rate)

    model.compile(optimizer = optimizer,
                    loss = tf.keras.losses.CategoricalCrossentropy(label_smoothing = 0.2),
                    metrics = ['accuracy'])
    
    model_path = './models/weights/ViT.h5'
    model.load_weights(model_path)
    
    vit_result = vit_grad_cam(img, 0)
    vit_result = Image.fromarray(vit_result)
    buffer = io.BytesIO()
    vit_result.save(buffer, format="PNG")
    vit_encoding_img = base64.b64encode(buffer.getvalue()).decode('utf-8')

    blurred = np.expand_dims(blurred, axis=0)
    lime_image = blurred
    blurred = np.reshape(blurred, (-1, 224, 224, 3))
    predictions = model.predict(blurred)
    predicted_class_num = int(np.argmax(predictions[0]))
    confidence = float(np.max(predictions[0]))

    classes = ['overripe', 'no', 'mature', 'incipient']

    predicted_class = classes[predicted_class_num]
    grayed_lime = lime_image[0]
    lime_output = visualize_image(grayed_lime, model)