A small wrapper library to help test systems using STAR
Project description
MOdel Test Harness (Moth)
A simple way to interrogate your AI model from a separate testing application.
Client
Simple classification model client.
from moth import Moth
from moth.message import ImagePromptMsg, ClassificationResultMsg, HandshakeTaskTypes
moth = Moth("my-ai", task_type=HandshakeTaskTypes.CLASSIFICATION)
@moth.prompt
def on_prompt(prompt: ImagePromptMsg):
# TODO: Do smart AI here
return ClassificationResultMsg(prompt_id=prompt.id, class_name="cat") # Most pictures are cat pictures
moth.run()
ClassificationResultMsg can optionally include a confidence value
ClassificationResultMsg(prompt_id=prompt.id, class_name="cat", confidence=0.9)
Simple object detection model client.
from moth import Moth
from moth.message import (
ImagePromptMsg,
ObjectDetectionResultMsg,
ObjectDetectionResult,
HandshakeTaskTypes,
)
moth = Moth("my-ai", task_type=HandshakeTaskTypes.OBJECT_DETECTION)
@moth.prompt
def on_prompt(prompt: ImagePromptMsg):
# TODO: Do smart AI here
# Make a list of ObjectDetectionResults
results = []
results.append(
ObjectDetectionResult(
0,
0,
50,
50,
class_name="cat",
class_index=0,
confidence=0.9, # Optional confidence
)
)
results.append(
ObjectDetectionResult(
10,
10,
50,
35,
class_name="dog",
class_index=1,
confidence=0.1, # Optional confidence
)
)
return ObjectDetectionResultMsg(
prompt_id=prompt.id, object_detection_results=results
)
moth.run()
Simple segmentation model client.
from moth import Moth
from moth.message import (
ImagePromptMsg,
SegmentationResultMsg,
SegmentationResult,
HandshakeTaskTypes,
)
moth = Moth("my-ai", task_type=HandshakeTaskTypes.SEGMENTATION)
@moth.prompt
def on_prompt(prompt: ImagePromptMsg):
# TODO: Do smart AI here
# Make a list of ObjectDetectionResults
results = []
results.append(
SegmentationResult(
[0, 0, 50, 50, 20, 20, 0, 0], # The predicted polygon
class_name="cat",
class_index=0,
confidence=0.9, # Optional confidence
)
)
results.append(
SegmentationResult(
[0, 0, 50, 50, 13, 20, 0, 0], # The predicted polygon
class_name="dog",
class_index=1,
confidence=0.1, # Optional confidence
)
)
return SegmentationResultMsg(prompt_id=prompt.id, results=results)
moth.run()
Mask to polygon conversion
Easily convert a binary mask to a polygon using the convert_mask_to_contour function from the moth.utils
module.
Usage
- Import the function:
from moth.utils import convert_mask_to_contour
- Prepare Your Mask: Ensure your mask is a 2D NumPy array where regions of interest are marked with 1s (or 255 for 8-bit images) and the background is 0.
- Convert the mask:
polygon = convert_mask_to_contour(mask)
Example
from moth.utils import convert_mask_to_contour
import numpy as np
# Example binary mask
mask = np.array([
[0, 0, 0, 0, 0],
[0, 1, 1, 1, 0],
[0, 1, 1, 1, 0],
[0, 0, 0, 0, 0]
], dtype=np.uint8)
# Convert the mask to a polygon
polygon = convert_mask_to_contour(mask)
# Output the polygon
print(polygon)
Client Output Classes
Define the set of output classes that your model can predict. This information is sent to the server so it knows the possible prediction classes of the model. This is recommended to ensure the model is not penalized for classes it cannot output:
moth = Moth("my-ai", task_type=HandshakeTaskTypes.CLASSIFICATION, output_classes=["cat", "dog"])
By specifying these output classes, the server can accurately assess the model's performance based on its intended capabilities, preventing incorrect evaluation against classes it is not designed to predict.
Server
Simple server.
from moth.server import Server
from moth.message import HandshakeMsg
class ModelDriverImpl(ModelDriver):
# TODO: Implement your model driver here
pass
server = Server(7171)
@server.driver_factory
def handle_handshake(handshake: HandshakeMsg) -> ModelDriver
return ModelDriverImpl()
server.start()
Subscribe to model changes
Track changes to the list of connected models:
from moth.server import Model
@server.on_model_change
def handle_model_change(model_list: List[Model]):
print(f"Connected models: {model_list}")
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file starmoth-0.10.1.tar.gz
.
File metadata
- Download URL: starmoth-0.10.1.tar.gz
- Upload date:
- Size: 11.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c880659b59bff971fa138d02909af7728c8659cb54525c7f58285c86e440ab8e |
|
MD5 | 2f4ef8792da3435f3656a58d1c91fd30 |
|
BLAKE2b-256 | b542dfab24811c5127a9ba4b1eef7db78b74ec8e6c6c78123a43ddc8175a0cab |
File details
Details for the file starmoth-0.10.1-py3-none-any.whl
.
File metadata
- Download URL: starmoth-0.10.1-py3-none-any.whl
- Upload date:
- Size: 12.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ce7d5d62c9d674ffa73c46c4a3475fb11c6f7bf1325b45dfec977ab131e0ba4d |
|
MD5 | 17badd604d7e40c37afc1da8e5f84ced |
|
BLAKE2b-256 | 9157a420becd9c3da2af8a604a13374c38d730c93cb5602717c7b0be82dbd867 |