anky2002 commited on
Commit
8cd421b
Β·
verified Β·
1 Parent(s): 3168ac9

Upload agents/optical_agent.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. agents/optical_agent.py +9 -23
agents/optical_agent.py CHANGED
@@ -37,10 +37,10 @@ def f01_ca_magnitude(img: Image.Image) -> Dict[str, Any]:
37
  rb = float(np.corrcoef(er[::step],eb[::step])[0,1])
38
  gb = float(np.corrcoef(eg[::step],eb[::step])[0,1])
39
  avg = (rg+rb+gb)/3
40
- if avg > 0.99: s,n = 0.6, "Perfect channel alignment β€” no natural CA"
41
  elif avg < 0.70: s,n = 0.5, "Abnormally low channel correlation"
42
  elif 0.80<=avg<=0.97: s,n = -0.4, "Natural CA pattern detected"
43
- else: s,n = 0.2, "Borderline CA"
44
  return {"test":"CA Magnitude","avg_corr":round(avg,4),"score":s,"note":n}
45
 
46
  # ── 2. CA Radial Gradient ────────────────────────────────────────────
@@ -103,8 +103,8 @@ def f05_vignetting_symmetry(img: Image.Image) -> Dict[str, Any]:
103
  q3 = float(np.mean(gray[h//2:,:w//2])); q4 = float(np.mean(gray[h//2:,w//2:]))
104
  qs = [q1,q2,q3,q4]; std = float(np.std(qs)); mean = float(np.mean(qs))
105
  asym = std/(mean+1e-9)
106
- if asym < 0.03: s,n = -0.2, f"Symmetric brightness (asym={asym:.4f}) β€” real optics"
107
- elif asym > 0.1: s,n = 0.3, f"Asymmetric brightness (asym={asym:.4f}) β€” manipulation"
108
  else: s,n = 0.0, f"Moderate asymmetry ({asym:.4f})"
109
  return {"test":"Vignetting Symmetry","asymmetry":round(asym,4),"score":s,"note":n}
110
 
@@ -381,9 +381,9 @@ def f20_optical_center(img: Image.Image) -> Dict[str, Any]:
381
  cy, cx = h/2, w/2
382
  offset_y = abs(y_max - cy)/(h+1e-9); offset_x = abs(x_max - cx)/(w+1e-9)
383
  offset = np.sqrt(offset_y**2 + offset_x**2)
384
- if offset < 0.1: s,n = -0.2, f"Optical center near image center (offset={offset:.3f})"
385
  elif offset < 0.25: s,n = 0.0, f"Slight optical center offset ({offset:.3f})"
386
- else: s,n = 0.2, f"Optical center far from center ({offset:.3f})"
387
  return {"test":"Optical Center","offset":round(offset,4),"score":s,"note":n}
388
 
389
 
@@ -395,20 +395,6 @@ ALL_TESTS = [f01_ca_magnitude,f02_ca_radial,f03_lateral_ca,f04_vignetting,
395
  f17_sharpness_falloff,f18_diffraction,f19_geometric_distortion,f20_optical_center]
396
 
397
  def run_optical_agent(img: Image.Image) -> AgentEvidence:
398
- findings, scores = [], []
399
- for fn in ALL_TESTS:
400
- try:
401
- r = fn(img); findings.append(r); scores.append(r["score"])
402
- except Exception as e:
403
- findings.append({"test":fn.__name__,"error":str(e),"score":0})
404
- avg = float(np.mean(scores)) if scores else 0.0
405
- conf = min(1.0, 0.5+0.5*abs(avg))
406
- viol = [f["test"] for f in findings if f.get("score",0)>0.2]
407
- comp = [f["test"] for f in findings if f.get("score",0)<-0.1]
408
- if viol: rat = f"Optical violations: {', '.join(viol)}."
409
- elif comp: rat = f"Optical physics consistent: {', '.join(comp)}."
410
- else: rat = "Optical analysis inconclusive."
411
- for f in findings:
412
- if f.get("note"): rat += f" [{f['test']}]: {f['note']}."
413
- return AgentEvidence("Optical Physics Agent", np.clip(avg,-1,1), conf,
414
- max(0.0,1.0-len(scores)/len(ALL_TESTS)), rat, findings)
 
37
  rb = float(np.corrcoef(er[::step],eb[::step])[0,1])
38
  gb = float(np.corrcoef(eg[::step],eb[::step])[0,1])
39
  avg = (rg+rb+gb)/3
40
+ if avg > 0.99: s,n = 0.35, "Near-perfect channel alignment β€” weak CA indicator (modern diffusion models can produce CA)"
41
  elif avg < 0.70: s,n = 0.5, "Abnormally low channel correlation"
42
  elif 0.80<=avg<=0.97: s,n = -0.4, "Natural CA pattern detected"
43
+ else: s,n = 0.15, "Borderline CA"
44
  return {"test":"CA Magnitude","avg_corr":round(avg,4),"score":s,"note":n}
45
 
46
  # ── 2. CA Radial Gradient ────────────────────────────────────────────
 
103
  q3 = float(np.mean(gray[h//2:,:w//2])); q4 = float(np.mean(gray[h//2:,w//2:]))
104
  qs = [q1,q2,q3,q4]; std = float(np.std(qs)); mean = float(np.mean(qs))
105
  asym = std/(mean+1e-9)
106
+ if asym < 0.03: s,n = -0.15, f"Symmetric brightness (asym={asym:.4f}) β€” real optics"
107
+ elif asym > 0.2: s,n = 0.15, f"Asymmetric brightness (asym={asym:.4f}) β€” possible manipulation (but could be scene lighting)"
108
  else: s,n = 0.0, f"Moderate asymmetry ({asym:.4f})"
109
  return {"test":"Vignetting Symmetry","asymmetry":round(asym,4),"score":s,"note":n}
110
 
 
381
  cy, cx = h/2, w/2
382
  offset_y = abs(y_max - cy)/(h+1e-9); offset_x = abs(x_max - cx)/(w+1e-9)
383
  offset = np.sqrt(offset_y**2 + offset_x**2)
384
+ if offset < 0.1: s,n = -0.1, f"Optical center near image center (offset={offset:.3f})"
385
  elif offset < 0.25: s,n = 0.0, f"Slight optical center offset ({offset:.3f})"
386
+ else: s,n = 0.1, f"Optical center offset ({offset:.3f}) β€” unreliable for scenes with bright objects"
387
  return {"test":"Optical Center","offset":round(offset,4),"score":s,"note":n}
388
 
389
 
 
395
  f17_sharpness_falloff,f18_diffraction,f19_geometric_distortion,f20_optical_center]
396
 
397
  def run_optical_agent(img: Image.Image) -> AgentEvidence:
398
+ from agents.utils import run_agent_tests
399
+ findings, avg, conf, fail, rat = run_agent_tests(ALL_TESTS, img, "Optical Physics Agent")
400
+ return AgentEvidence("Optical Physics Agent", np.clip(avg,-1,1), conf, fail, rat, findings)