Public Lab Research note

Fat percent in milk

by wagnerc4 | | 3,275 views | 10 comments |

Read more:

I work in a litter industry that process milk cow, here the fat percent is measured with: Gerber method. Some industries have a instrument that measures some parameters of the milk, but is too expensive... I think this instrument is some kind of spectrometer. So I try to measure the fat percent, with the publiclab spectrometer.

Materials: - spectrometer - lamp 30 watts - tube and carton



In the spectrum I only evaluate blue.

To analyse the spectrum I use debian testing, and install these packages:

apt-get install mplayer python-imaging python-matplotlib


#! /usr/bin/env python
Author: Wagner Corrales M.

from bisect import bisect
from subprocess import call
from Image import open
from matplotlib.pyplot import plot, show

values = {96.00: 4.0,
          96.70: 3.9,
          97.30: 3.8,
          97.90: 3.7,
          98.40: 3.6,
          98.80: 3.5,
          99.15: 3.4,
          99.50: 3.3,
          99.80: 3.2,
          100.10: 3.1,
          100.40: 3.0,
          100.70: 2.9,
          100.95: 2.8,
          101.15: 2.7,
          101.35: 2.6,
          101.50: 2.5,
          101.65: 2.4,
          101.75: 2.3,
          101.85: 2.2,
          101.90: 2.0,
          101.95: 1.9,
          102.00: 1.8}
v_keys = sorted(values.keys())
v_values = [values[k] for k in v_keys]

def info(spectrum):
  s0, s1 = 0, 0
  for s in spectrum[5:355]:
    s0 = s0 + s
  for s in spectrum[355:635]:
    s1 = s1 + s
  key = ((s1/280.0)*100)/((s0+s1)/630.0)
  index = bisect(v_keys, key)
  print key, v_values[index]

call("mplayer tv:// -tv device=/dev/video1:width=640:height=480:outfmt=rgb24 -frames 5 -vo png", shell=True)

pix = open('00000005.png').load()
r = [pix[i, 240][0] for i in range(640)]
g = [pix[i, 240][1] for i in range(640)]
b = [pix[i, 240][2] for i in range(640)]
plot(r, "r")
plot(g, "g")
plot(b, "b")


The script need execution permissions: chmod a+x

Then execute the script: ./




These result perfect!!!

I did this Help out by offering feedback! Browse other activities for "spectrometry"

People who did this (0)

None yet. Be the first to post one!


Hello - very interesting project! Were you able to distinguish different percents of milkfat? What do the two graphs you used represent?

You can post code by putting four spaces before each line, or by putting code inside of these marks. Er, the marks are these: `

If you like, I am an admin and can help you do it, just ask.

Is this a question? Click here to post it to the Questions page.

Hi! the first graph is from milk with fat 3.5% and the second with fat 2.7%. I compare many samples and at the frequency 355 to 640, I see the behavior that I expected. The function info is the way I measure the changes from each sample.

Wow, that's great. Did you use SpectralWorkbench to collect your data about the different samples you used to build your model? It'd be great to see all of them graphed together in a set.

Could we try to create a macro for SpectralWorkbench for this, so people could run it on their phones? I imagine it's quite dependent on calibrating the intensity of the light source, no?

Is this a question? Click here to post it to the Questions page.

Yes, it is important to have the same light intensity in all the samples. But to have a exact intensity is hard, that is the reason that I only evaluate the blue because its behavior at light intensity.

I didn't use SpectralWorkbench. I try to install in my computer and I have many troubles. Did you consider to write the SpectralWorkbench in Python? Python is perfect for educational purposes and I think this facilitate to contribute in code especially to this project.

Is this a question? Click here to post it to the Questions page.

Where did you try to install it from? has been a purely web-based program that does not require installation for a couple years now. If there is a link somewhere telling you to download software and run it, we need to fix that information! Thank you for mentioning it!

Is this a question? Click here to post it to the Questions page.

Where can I download the source code of this SpectralWorkbench purely web-based program???

Is this a question? Click here to post it to the Questions page.

The program runs in the browser, such as Chrome, Firefox, or Opera:

In the footer of every page is a link to the source code, but you do not need to download it to use it. You are of course welcome to download the source if you are interested in contributing to it! That would be great.

In the commercial spectrometer measuring milk fat%, the range is mostly between 600-1100nm. Could you correlate the peaks with the actual fat% in this (355-640nm) range? I am starting working on this project : Milk fat% determination with a diy spectrometer in the range 600-1100. I am using fridge lamp (15w) as a source. But its gets really heated up. Also thinking on other sources such as multiple LEDs to make the whole spectra.

Is this a question? Click here to post it to the Questions page.

I see the test tube, test tube holder, and bit of cardboard -- straightforward! Was there any preparation you did to the milk itself before / during scanning?

Is this a question? Click here to post it to the Questions page.

Login to comment.

Public Lab is open for anyone and will always be free. By signing up you'll join a diverse group of community researchers and tap into a lot of grassroots expertise.

Sign up