fix: remove trace_chunks from API + fix OCR frame calculation
- Removed trace_chunks field from PostgresStats struct - Removed trace_chunks query from get_file_stats and get_ingestion_status - Fixed OCR fetch_ocr_texts to compute frames from start_time*FPS - Updated scan.rs to use separate count_nodes/count_edges functions
This commit is contained in:
@@ -40,7 +40,6 @@ struct ProcessorStatus {
|
|||||||
#[derive(Debug, Serialize, Default)]
|
#[derive(Debug, Serialize, Default)]
|
||||||
struct PostgresStats {
|
struct PostgresStats {
|
||||||
sentence_chunks: i64,
|
sentence_chunks: i64,
|
||||||
trace_chunks: i64,
|
|
||||||
relationship_chunks: i64,
|
relationship_chunks: i64,
|
||||||
identities: i64,
|
identities: i64,
|
||||||
file_identities: i64,
|
file_identities: i64,
|
||||||
@@ -514,9 +513,6 @@ async fn get_ingestion_status(
|
|||||||
));
|
));
|
||||||
let face_total = face_total;
|
let face_total = face_total;
|
||||||
let trace_count = trace_count;
|
let trace_count = trace_count;
|
||||||
let trace_chunks = count_sql!(&format!(
|
|
||||||
"SELECT COUNT(*) FROM {chunk} WHERE file_uuid = '{file_uuid}' AND chunk_type = 'trace'"
|
|
||||||
));
|
|
||||||
let identity_count = identity_count;
|
let identity_count = identity_count;
|
||||||
let tkg_nodes = count_sql!(&format!(
|
let tkg_nodes = count_sql!(&format!(
|
||||||
"SELECT COUNT(*) FROM {} WHERE file_uuid = '{file_uuid}'",
|
"SELECT COUNT(*) FROM {} WHERE file_uuid = '{file_uuid}'",
|
||||||
@@ -609,11 +605,6 @@ async fn get_ingestion_status(
|
|||||||
trace_count > 0,
|
trace_count > 0,
|
||||||
Some(format!("{trace_count} traces / {face_total} detections"))
|
Some(format!("{trace_count} traces / {face_total} detections"))
|
||||||
),
|
),
|
||||||
step!(
|
|
||||||
"trace_chunks",
|
|
||||||
trace_chunks > 0,
|
|
||||||
Some(format!("{trace_chunks} trace chunks"))
|
|
||||||
),
|
|
||||||
// TKG Nodes
|
// TKG Nodes
|
||||||
step!("tkg_face_track", face_track_nodes > 0, Some(format!("{face_track_nodes} nodes"))),
|
step!("tkg_face_track", face_track_nodes > 0, Some(format!("{face_track_nodes} nodes"))),
|
||||||
step!("tkg_gaze_track", gaze_track_nodes > 0, Some(format!("{gaze_track_nodes} nodes"))),
|
step!("tkg_gaze_track", gaze_track_nodes > 0, Some(format!("{gaze_track_nodes} nodes"))),
|
||||||
@@ -736,13 +727,6 @@ async fn get_file_stats(
|
|||||||
.fetch_one(pool)
|
.fetch_one(pool)
|
||||||
.await
|
.await
|
||||||
.unwrap_or(0),
|
.unwrap_or(0),
|
||||||
trace_chunks: sqlx::query_scalar::<_, i64>(&format!(
|
|
||||||
"SELECT COUNT(*) FROM {chunk_table} WHERE file_uuid = $1 AND chunk_type = 'trace'"
|
|
||||||
))
|
|
||||||
.bind(&file_uuid)
|
|
||||||
.fetch_one(pool)
|
|
||||||
.await
|
|
||||||
.unwrap_or(0),
|
|
||||||
relationship_chunks: sqlx::query_scalar::<_, i64>(&format!(
|
relationship_chunks: sqlx::query_scalar::<_, i64>(&format!(
|
||||||
"SELECT COUNT(*) FROM {chunk_table} WHERE file_uuid = $1 AND chunk_type = 'relationship'"
|
"SELECT COUNT(*) FROM {chunk_table} WHERE file_uuid = $1 AND chunk_type = 'relationship'"
|
||||||
))
|
))
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ pub async fn execute_rule1(db: &PostgresDb, file_uuid: &str, fps: f64) -> Result
|
|||||||
let pre_chunks_table = schema::table_name("pre_chunks");
|
let pre_chunks_table = schema::table_name("pre_chunks");
|
||||||
|
|
||||||
let asr_segments = fetch_asr_segments(pool, file_uuid, &pre_chunks_table, fps).await?;
|
let asr_segments = fetch_asr_segments(pool, file_uuid, &pre_chunks_table, fps).await?;
|
||||||
let ocr_map = fetch_ocr_texts(pool, file_uuid, &pre_chunks_table).await?;
|
let ocr_map = fetch_ocr_texts(pool, file_uuid, &pre_chunks_table, fps).await?;
|
||||||
|
|
||||||
let video = db
|
let video = db
|
||||||
.get_video_by_uuid(file_uuid)
|
.get_video_by_uuid(file_uuid)
|
||||||
@@ -161,14 +161,15 @@ async fn fetch_ocr_texts(
|
|||||||
pool: &PgPool,
|
pool: &PgPool,
|
||||||
file_uuid: &str,
|
file_uuid: &str,
|
||||||
table: &str,
|
table: &str,
|
||||||
|
fps: f64,
|
||||||
) -> Result<BTreeMap<i64, Vec<String>>> {
|
) -> Result<BTreeMap<i64, Vec<String>>> {
|
||||||
let query = format!(
|
let query = format!(
|
||||||
r#"
|
r#"
|
||||||
SELECT
|
SELECT
|
||||||
coordinate_index as frame, data
|
start_frame, start_time, end_time, data
|
||||||
FROM {}
|
FROM {}
|
||||||
WHERE file_uuid = $1 AND processor_type = 'ocr'
|
WHERE file_uuid = $1 AND processor_type = 'ocr'
|
||||||
ORDER BY coordinate_index
|
ORDER BY start_frame
|
||||||
"#,
|
"#,
|
||||||
table
|
table
|
||||||
);
|
);
|
||||||
@@ -177,9 +178,16 @@ async fn fetch_ocr_texts(
|
|||||||
|
|
||||||
let mut map: BTreeMap<i64, Vec<String>> = BTreeMap::new();
|
let mut map: BTreeMap<i64, Vec<String>> = BTreeMap::new();
|
||||||
for row in rows {
|
for row in rows {
|
||||||
let frame: i64 = row.try_get("frame").unwrap_or(0);
|
let start_time: f64 = row.try_get("start_time").unwrap_or(0.0);
|
||||||
|
let end_time_raw: Option<f64> = row.try_get("end_time").ok();
|
||||||
let data: Value = row.try_get("data").unwrap_or(Value::Null);
|
let data: Value = row.try_get("data").unwrap_or(Value::Null);
|
||||||
|
|
||||||
|
let start_frame = (start_time * fps) as i64;
|
||||||
|
let end_frame = end_time_raw
|
||||||
|
.filter(|t| *t > 0.0)
|
||||||
|
.map(|t| (t * fps) as i64)
|
||||||
|
.unwrap_or(start_frame + 1);
|
||||||
|
|
||||||
let texts: Vec<String> = data
|
let texts: Vec<String> = data
|
||||||
.get("texts")
|
.get("texts")
|
||||||
.and_then(|t| t.as_array())
|
.and_then(|t| t.as_array())
|
||||||
@@ -201,7 +209,16 @@ async fn fetch_ocr_texts(
|
|||||||
})
|
})
|
||||||
.unwrap_or_default();
|
.unwrap_or_default();
|
||||||
|
|
||||||
map.insert(frame, texts);
|
// Store texts for each frame in the range
|
||||||
|
for frame in start_frame..=end_frame {
|
||||||
|
map.entry(frame).or_default().extend(texts.clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deduplicate texts per frame
|
||||||
|
for (_frame, texts) in map.iter_mut() {
|
||||||
|
let mut seen = std::collections::HashSet::new();
|
||||||
|
texts.retain(|t| seen.insert(t.clone()));
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(map)
|
Ok(map)
|
||||||
|
|||||||
Reference in New Issue
Block a user