Spaces:
Sleeping
Sleeping
import streamlit as st | |
from fengxai.render import setModel, getModel, updateModel, applyBindingController | |
from fengxai.inference import imagePrediction | |
from PIL import Image | |
## model | |
setModel("distance", 30.07) # (英尺/米)到物体的距离 | |
setModel("sensorHeight", 24) # (毫米)传感器高度 | |
setModel("imageObjectHeight", 2724) # (像素)图像中物体的高度 | |
setModel("lensFocalLength", 60) # (像素)镜头焦距 | |
setModel("imageHeight", 4912) # (像素)图片的高度 | |
## and controller | |
updateModel( # 物体高度 | |
"objectHeight", | |
str(getModel("sensorHeight") * getModel("imageObjectHeight") * getModel("distance") / (getModel("lensFocalLength") * getModel("imageHeight"))) | |
) | |
## (default)set image info | |
setModel("imageInfo") | |
def changeUploadFile(): | |
updateModel("imageInfo", { | |
"imageFile": getModel("imageUploadFile"), | |
"isUploadImageFile": True # 图片上传开关,控制ai模型在正确的事件下识别图像物体 | |
}) | |
def changeDelete(): | |
updateModel("imageInfo", "") | |
## view: side 左侧边栏 | |
def render(): | |
st.set_page_config(layout="wide") | |
with st.sidebar: | |
st.title("example") | |
st.image("assets/e2.jpg") | |
if st.button('use'): | |
updateModel("imageInfo", { | |
"imageFile": "assets/e2.jpg", | |
"isUploadImageFile": True | |
}) | |
# page | |
st.title("Rjxai v4_1: :blue[Get object height]") | |
with st.container(): | |
st.title("Step 1: Rjxai Image Identification") | |
st.file_uploader( | |
label = "Upload your image here: png, jpg, jpeg", | |
type=['png','jpg','jpeg'], | |
on_change=changeUploadFile, | |
key="imageUploadFile", | |
) | |
if getModel('imageInfo') != "": | |
def callback(output): | |
print("output=", output) | |
updateModel("imageHeight", output["imageHeight"]) | |
updateModel("imageObjectHeight", output["objectHeight"]) | |
c1, c2 = st.columns([0.7, 0.3]) | |
with c1.container(): | |
imageInput = Image.open(output["imageOutput"]) | |
st.image(imageInput) | |
with c2.container(): | |
st.button("delete image", on_click=changeDelete) | |
if getModel("imageInfo")["isUploadImageFile"]: | |
def tmpCallback(output): | |
updateModel("imageInfo", { | |
"imageFile": getModel("imageInfo")["imageFile"], | |
"tmpUploadImageInfo": output, # 存放图片的临时信息 | |
"isUploadImageFile": False | |
}) | |
print("output=", output) | |
callback(output) | |
imagePrediction(getModel('imageInfo')["imageFile"], tmpCallback) | |
else: | |
callback(getModel("imageInfo")["tmpUploadImageInfo"]) | |
with st.container(): | |
st.title("Step 2: Calculate real object height") | |
col1, col2 = st.columns(2) | |
with col1.container(): | |
st.subheader("Input:") | |
st.number_input('(pixels) image height', key="imageHeight") | |
st.number_input('(pixels) image object height', key="imageObjectHeight") | |
st.number_input('(mm) sensor height', key="sensorHeight") | |
st.number_input('(mm) lens focal length', key="lensFocalLength") | |
st.number_input('(feet or meters) distance', key="distance") | |
with col2: | |
st.subheader("Output:") | |
st.text_area("(feet or meters) object height:", key="objectHeight", disabled=True) | |
# control 绑定 | |
applyBindingController(render) | |